Descripción general
La clasificación rápida es un algoritmo de clasificación desarrollado por Tony Hall. En la situación promedio, el orden de N ítems requiere la comparación de O (NLOGN). De hecho, la clasificación rápida suele ser significativamente más rápida que otros algoritmos O (NLOGN), porque su bucle interno se puede implementar de manera eficiente en la mayoría de las arquitecturas, y en la mayoría de los datos del mundo real, puede determinar la elección del diseño y reducir la posibilidad de términos cuadráticos que requieren tiempo.
La clasificación rápida, divida los registros que se clasificarán en dos partes independientes a través de un orden, donde las palabras clave de algunos registros son más pequeñas que las palabras clave de la otra parte, y luego los dos registros continúan clasificándose por separado para lograr el propósito de ordenar toda la secuencia.
Ilustración de imagen:
paso
Al seleccionar un elemento de referencia, el primer elemento o el último elemento generalmente se selecciona para dividir los registros que se clasificarán en dos partes independientes a través de una orilla de un sol, donde los valores del elemento de algunos registros son más pequeños que los valores de elementos de referencia. Los elementos registrados en la otra parte son mayores que el valor de referencia. En este momento, los elementos de referencia están en la posición correcta después de que se clasifican, y luego las dos partes de los registros continúan clasificándose de la misma manera hasta que se ordene toda la secuencia.
Ejemplo
Datos sin procesar:
3 5 2 6 2
Seleccione 3 como punto de referencia
La primera ronda
De derecha a izquierda para encontrar algo más pequeño que 3, 2 coincidencias, y ajuste 2 y 3 2 5 2 2 6 3 una vez, y la dirección de la búsqueda se invierte, de izquierda a derecha para encontrar algo más grande que 3, 5 coincidencias, y ajuste 2 3 2 6 5, luego de derecha a izquierda para encontrar algo más pequeño que 3, 2, y ajuste 2 2 2 3 5 UNA RED RODED LOS END
Ronda 2
Se realiza el mismo método que el anterior para [2 2], y 2 2 3 6 5
La tercera ronda
Se realiza el mismo método que el anterior para [6 5], y 2 2 3 5 6
Resultado final
2 2 3 5 6
Implementación del código (Java)
paquete com.coder4j.main.arithmetic.sorting; public class Quick {private static int mark = 0; / ** * Método de intercambio auxiliar * * @param Array * @param a * @param b */ private static void swap (int [] array, int a, int b) {if (a! = B) {int temp = array [a]; matriz [a] = matriz [b]; matriz [b] = temp; // Encuentra el sistema de coincidencia, Switch.out.println ("Shift" + Array [A] + "y" + Array [B] + ", Get"); for (int i: array) {system.out.print (i + ""); } System.out.println (); }} / ** * nueva ronda de separación * * @param Array * @param low * @param high * @return * / private static int particion (int Array [], int low, int high) {int base = array [low]; marca ++; System.out.println ("Silido en progreso" + Mark + "Separación de la rueda, área:" + Low + "-" + alto); while (bajo <high) {while (bajo <high && array [high]> = base) {high--; System.out.println ("De derecha a izquierda para encontrar la relación" + base + "pequeño, cambio de puntero:" + low + "-" + alto); } intercambio (matriz, bajo, alto); while (Low <High && Array [Low] <= Base) {Low ++; System.out.println ("De izquierda a derecha para encontrar la relación" + base + "gran cambio de puntero:" + Low + "-" + alto); } intercambio (matriz, bajo, alto); } return Low; } / ** * Clasificación rápida de la matriz, llame recursivamente * * @param matriz * @param low * @param altura * @return * / private static int [] Quicksort (int [] array, int low, int altura) {if (bajo <altura) {int division = partition (array, baja, altura); Quicksort (matriz, bajo, división - 1); Quicksort (matriz, división + 1, altura); } matriz de retorno; } / ** * sort rápida * * @param array * @return * / public static int [] sort (int [] array) {return Quicksort (Array, 0, Array.length - 1); } public static void main (string [] args) {int [] array = {3, 5, 2, 6, 2}; int [] sorted = sort (array); System.out.println ("resultado final"); para (int i: sorted) {system.out.print (i + ""); }}}Resultados de la salida de prueba:
Seleccione todo y póngalo en las notas. Se está realizando la primera ronda de separación. Área: 0-4. La segunda ronda de ajustes son 2 y 3. La segunda ronda de separación es 2 5 2 6 3. La segunda ronda de separación es 3 y 5. La segunda ronda de separación es 2 3 2 6 5. La segunda ronda de separación es 3 y 6. La segunda ronda de separación es 2 y 3. La segunda ronda de separación es 2 y 3. La segunda ronda de separación es 2 y 3. La segunda ronda de separación es 2 y 3. La segunda ronda de la separación es 2. La separación es 2 y 3. La segunda ronda de separación es 2 y 3. La segunda ronda de separación es 2 y 3. La segunda ronda de separación es 2 y 2 son 3. 6. La tercera ronda de separación es 2 y 3 son 6. La segunda ronda de separación es 2 y 3 son 6. La última ronda de separación es 2 y 3 son 6. La última ronda de separación es 2 son 2 y 3 son 2. El último 2. El último resultado es 2 2 3 5 6.
Después de la prueba, es consistente con los resultados en el ejemplo.