[Algoritmo] Clasificación rápida

Para encontrar un buen trabajo, desde el granjero de código hasta el ingeniero, registremos la comprensión de la serie de algoritmos.

La clasificación rápida es una especie de clasificación de intercambio, es una manifestación de la idea de dividir y conquistar en términos de diseño de algoritmos. Pero en comparación con el tipo de burbuja original, se han realizado algunas optimizaciones.
Para una clasificación rápida, la primera comprensión es que hay un punto de pivote (punto medio). A la izquierda de este elemento de punto medio hay todos los elementos más pequeños, a la derecha de este elemento de punto medio están todos los elementos más grandes. Esta es la idea central.

¿Cómo lograrlo?
Primero, queremos tomar el primer elemento como el elemento "punto medio".
Luego se atraviesa a izquierda y derecha.
Piensa en tres una vez más.

Tenga en cuenta que hay algunos consejos de código al recorrer aquí.
Tomando los iteradores i y j,
mientras que i <j,
primero buscamos uno más grande, comenzamos a recorrer desde la derecha, y una vez que encontramos un elemento pequeño (más pequeño que el "punto medio"), nos detenemos y registramos su posición como j.
Luego comience a desplazarse desde la izquierda. Aquí, puede usar <=, siempre que sea más pequeño que el punto medio, continúe avanzando hasta encontrar un elemento grande (más grande que el "punto medio") y pare en su posición i.
Aquí intercambiamos los elementos correspondientes de i y j.
Continúa el ciclo while

De esta manera, se puede completar una ronda, y se puede completar una ronda, es decir, el lado izquierdo del punto medio es pequeño y el lado derecho es grande, y la posición del punto medio se conoce como i.
Luego usa dos funciones recursivas.
quickSort (a, n, L, i-1);
quickSort (a, n, i + 1, R);
puede completar la idea de dividir y conquistar.
El código es el siguiente,

// 快速排序,分治法
void quickSort(int a[],int n,int L,int R)
{
    if(L<R)
    {
        int i=L,j=R;
        int temp = a[L];
        while(i<j)
        {
            while(a[j]>temp&&i<j)
            {
                --j;
            }
            while(a[i]<=temp&&i<j)
            {
                ++i;
            }
            swap(a[i],a[j]);
        }
        swap(a[i],a[L]);
        quickSort(a,n,L,i-1);
        quickSort(a,n,i+1,R);
    }
}

Supongo que te gusta

Origin www.cnblogs.com/likeshu/p/12727419.html
Recomendado
Clasificación