Ordenar - Ordenar rápido

1, citado

  • La clasificación de burbujas tiene sus propias deficiencias. Es un intercambio entre dos elementos adyacentes, lo cual es relativamente ineficiente. Obviamente, no es bueno para clasificar con más datos. La clasificación rápida es una mejora de la clasificación de burbujas. Propuesto por CAR Hoare en 1962.

2. La idea básica

  • La idea básica de la ordenación rápida es: divida los datos que se van a ordenar en dos partes independientes clasificándolos, todos los datos de una parte son más pequeños que todos los datos de la otra parte, y luego realice las dos partes de los datos por separado según a este método Para una clasificación rápida, todo el proceso de clasificación se puede realizar de forma recursiva, de modo que todos los datos se conviertan en una secuencia ordenada.

Considere la siguiente matriz:
9, 3, 6, 5, 7, 4

primer paso:

  • Primero un pivote, este pivote se puede elegir a voluntad, puede establecer un algoritmo pivot = array [n / 2], tome el número del medio
    pivot = 5;

El segundo paso:

  • Más largo que el pivote a la izquierda números grandes, encuentre el número derecho es más pequeño que el pivote de
    la izquierda para encontrar 9 desde la derecha encontrado 4

tercer paso:

  • Intercambie los dos números encontrados en el segundo paso con
    4 , 3 , 6, 5 , 7, 9

el cuarto paso:

  • Encuentre los siguientes datos que cumplan con las condiciones del segundo paso, hasta que los subíndices izquierdo y derecho sean iguales y finalice la ronda actual de intercambio.
    Después de una ronda de intercambio:
    4 , 3, 5, 6 , 7, 9

el quinto paso:

  • Una vez completado el cuarto paso, los datos del subíndice izquierdo a la izquierda son más pequeños que el pivote y los datos de la derecha son más grandes que el pivote, por lo que se divide una matriz desordenada en dos partes.
    - 4, 3, 5, los datos de este lado son todos menores que 5 (igual a);
    - 6, 7, 9, los datos de este lado son todos mayores que 5;

El sexto paso:

  • Empiece de nuevo desde el primer paso a las dos partes que están divididas y llame de forma recursiva.

3. Implementación del lenguaje C

void quick_sort( int *array, int n)
{
    int left, right, pivot, tmp;
    if (n < 2)  return; //递归退出的条件

    pivot = array[n / 2]; //取中间的数为基准

    for ( left = 0, right = n -1;; left++, right--)
    {
        //从左边开始找大于pivot的数
        while (array[left] < pivot) 
            left++;

        //从右边开始找小于pivot的数
        while (pivot < array[right])
            right--;

        if ( left >= right) //本轮交换结束了
            break;

        //交换
        tmp = array[left];
        array[left] = array[right];
        array[right] = tmp;
    }

    quick_sort(array, left); //对左边的排序
    quick_sort(array + left, n - left);//对右边的排序
}

4. Resumen

  1. Divide y conquistaras
  2. Recursividad
  3. intercambio

5. Referencia

https://www.youtube.com/watch?v=SLauY6PpjW4
http://developer.51cto.com/art/201403/430986.htmyc

Supongo que te gusta

Origin blog.csdn.net/amwha/article/details/77440464
Recomendado
Clasificación