domingo, 11 de mayo de 2014

Algoritmos de Ordenación: QuickSort en Java

Buenas gente. Llevo ya tiempo planteándome hacer entradas con algoritmos de ordenación y búsqueda (sobre todo). Y me he decidido a hacer el primero.

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