PHP para lograr la ordenación rápida de

prefacio

ordenación rápida es un algoritmo de clasificación desarrollado por el de Tony Hoare. Bajo condiciones normales, para ordenar n elementos a Ο (nlogn) comparar los tiempos. En la peor situación que necesita para comparaciones ¼ (N2), pero esta situación no es infrecuente. De hecho, rápido Ordenado por lo general es significativamente más alta que otra Ο (nlogn) algoritmo es más rápido debido a que su bucle interno (bucle interno) puede ser implementado de manera muy eficiente a cabo en la mayor parte de la arquitectura.

Rápida especie mediante una estrategia de divide y vencerás (Divide y vencerás) para poner una serie (lista) se divide en dos sub-serie (sub-listas).

Ordenar rápida es una típica se aplican a dividir y conquistar pensamientos en algoritmos de clasificación. En esencia, más o menos rápida debe burbujeando división recursiva y la conquista sobre la base de la clase.

Rápida clase de nombre es simple y de crudo, como se escucha el nombre que va a conocer el significado de su existencia, es decir, rápido y eficiente! Es uno de los grandes de procesamiento de datos más rápido algoritmo de clasificación. Aunque los alcances Peor Caso complejidad en tiempo de O (N ²), pero la gente es buena, mejor que la complejidad promedio de tiempo es O (n log n) algoritmos de clasificación fue mejor en la mayoría de los casos, pero esta es la razón, no se. Afortunadamente, mi trastorno obsesivo-compulsivo y comprometido, la investigación más que datos N finalmente encontró una respuesta satisfactoria en el "arte algoritmo e Informática Concurso":

El quicksort operativo del peor caso es O (N $ ² $), por ejemplo, la fila rápida secuencia de número de pedido. Sin embargo, es el momento amortizado deseable es O (nlogn), y O (nlogn) notación implica un pequeño factor constante, igual complejidad que O (nlogn) de combinación estable especie es mucho más pequeño. Por lo tanto, la gran mayoría de la orden de la secuencia de números aleatorios débil, el tipo rápido es siempre mejor que la combinación de una especie.

pasos de un algoritmo

1, recoger un elemento de la serie, llamados de "referencia" (pivote);

2, la reordenación de las columnas, todos los elementos colocados en frente de la pequeña referencia al valor de referencia, todos los elementos colocados detrás del valor de referencia más grande que el de referencia (el número puede ser o bien el mismo lado). Después de la salida de la partición, sobre la base del número de columnas en la posición media. Esto se denomina una operación (partición) de partición;

3, de forma recursiva (recursivas Este) que el valor de referencia el número de columnas y el sub-elemento es mayor que el valor de referencia del elemento de niño de las columnas ordenados;

El fondo de la caja de la recursividad, el tamaño es el número de columnas es cero o uno, es decir, siempre ha sido ordenados así. Si bien ha sido la recursividad, pero este algoritmo siempre dejar de fumar, ya que en cada iteración (iteración), que será colocado al menos un elemento en su posición final ir.

La idea básica :( partición)

  • Retirar un número de clave como el número de columnas en el valor inicial;

  • Este número pequeño que el número total en su lado izquierdo, es mayor que o igual que el número de todos en su lado derecho;

  • Izquierda y derecha dos columnas decimal repita el paso hasta que sólo un número cada intervalo.

Auxiliares comprender : la excavación de relleno en el número de

Inicialmente i = 0; j = 9; clave = 72

1, ya que el número se ha guardado a [0] en la clave puede ser entendido como un cavado hoyo en la matriz a [0], los datos se pueden llenar en el otro a esto.

2, j desde un comienzo pequeño deseando que el número clave. Cuando j = 8, cumple con los requisitos, a [0] = a [8]; i ++; la una [8] en un cavado hoyo de recarga a [0] en.

3, un pozo de un tal [0] fue a levantarse, pero la formación de un nuevo pozo de una [8], la forma de hacer esto? Simple, encontrar una digital para llenar una [8] el pozo.

4, el inicio mirando hacia atrás desde un número i es mayor que la clave, cuando i = 3, cumple con los requisitos, a [8] = a [3]; j-; a un [3] en una recarga foso cavado en.

1, cuando i = 3; j = 7; clave = 72

2 y repita los pasos anteriores, después de la salida mirando hacia adelante, y luego de frente mirando hacia atrás.

3, mirando hacia delante desde la j principio, cuando j = 5, en línea con las condiciones, un [5] para llenar un cavado hoyo, un [3] = a [5]; i ++;

4, desde el principio que mira hacia atrás i, cuando i = 5, ya que i == salida j.

5, en este momento, i = j = 5, y A [5] es sólo el último cavado hoyo, por tanto, el relleno clave a [5].

Como puede verse a [5] es inferior a las figuras anteriores, un [5] es mayor que el número después de ella. Por lo tanto los pasos anteriores se repiten para una [0 ... 4] y una [6 ... 9] Este dos sub-intervalo de ella.

presentación de mapa móvil

PHP implementación del código

function QuickSort($arr){
    $num = count($arr);
    $l = $r = 0;
    $left = $right = array();
    // 从索引的第二个开始遍历数组
    for ($i = 1;$i < $num; $i++) {
        // 如果值小于索引1
        if ($arr[$i] < $arr[0]) {
            // 装入左索引数组(小于索引1的数据)
            $left[] = $arr[$i];
            $l++;
        } else {
            // 否则装入右索引中(大于索引1的数据)
            $right[] = $arr[$i];
            $r++; //
        }       
    }
    // 如果左索引有值 则对左索引排序
    if($l > 1) {
        $left = QuickSort($left);
    }
    // 排序后的数组
    $new_arr = $left;
    // 将当前数组第一个放到最后
    $new_arr[] = $arr[0];
    // 如果又索引有值 则对右索引排序
    if ($r > 1) {
        $right = QuickSort($right);
    }
    // 根据右索引的长度再次增加数据
    for($i = 0;$i < $r; $i++) {
        $new_arr[] = $right[$i];
    }
    return $new_arr;
}

 

Publicados 109 artículos originales · ganado elogios 101 · vistas 360 000 +

Supongo que te gusta

Origin blog.csdn.net/Alen_xiaoxin/article/details/105203527
Recomendado
Clasificación