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