QuickSort fue desarrollado por Hoare en 1960 y se basa en le técnica de 'divide y vencerás' para ordenar un array de elementos. Para ello se toma un elemento cualquiera del array al que llamaremos 'pivote' y todos los elementos menores los movemos a su izquierda y los mayores a su derecha. A continuación se realiza lo mismo con las dos partes.
Sería algo así:
Una posible implementación del código (no la única) sería la siguiente:
public class quicksort { public static void quicksort(int A[], int izq, int der) { int piv=A[izq]; // tomamos el primer elemento como pivote int i=izq; // i realiza la búsqueda de izquierda a derecha int j=der; // j realiza la búsqueda de derecha a izquierda int aux; while(i<j){ // mientras no se crucen... while(A[i]<=piv && i<j) i++; // busca un elemento mayor que pivote, while(A[j]>piv) j--; // busca un elemento menor que pivote, if (i<j) { // si los encuentra y no se han cruzado... aux= A[i]; // los intercambia. A[i]=A[j]; A[j]=aux; } } A[izq]=A[j]; // colocamos el pivote en su lugar de la forma [menores][pivote][mayores] A[j]=piv; if(izq<j-1) quicksort(A,izq,j-1); // ordenamos mitad izquierda if(j+1 <der) quicksort(A,j+1,der); // ordenamos mitad derecha } }
Pues gente, Veréis que tampoco es demasiado complejo no? Tengo ganas de empezar con algunos más avanzados ^^ Saludos, y espero que os guste tanto como a mi todo esto :)
No hay comentarios:
Publicar un comentario