miércoles, 17 de noviembre de 2010

QUICKSORT CENTRAL

El siguiente algoritmo define el método de ordenación Quicksort utilizando como elemento pivote el elemento que esta en el medio de la lista de elementos:


función QUICKSORT (variables v: vector; pi, pf: enteros)
   variables 
      i, j: índice; 
      x: elemento 
   fvar
   comienzo
   si pi < pf entonces
      x = a[(pi + pf)/2];
      i = pi; 
      j = pf;
      repetir
         mientras a[i] < x hacer 
            i=i+1 fmientras
         mientras a[j] > x hacer 
            j=j-1 fmientras
         si i <= j entonces
            SWAP (a[i], a[j]); 
            i = i + 1; 
            j = j - 1;
         fsi
      mientras i <= j;
      QUICKSORT (a, pi, j);
      QUICKSORT (a, i, pf);
   fsi
fin



  • Los elementos pi y pf serán los índices inferior y posterior respectivamente del vector.
  • Como podemos observar utilizamos como pivote el elemento que esta en la mitad del vector:  

             x = a[(pi + pf)/2];

  • Y una vez colocado en su posición hacemos una llamada recursiva con los dos subvectores, el de la parte derecha (desde i hasta pf),  y el de la parte izquierda (desde pi hasta j).
  • Este algoritmo define ordenación ascendente. Si lo que quisiésemos fuese lo contrario solo habría que modificar estas líneas:


             mientras a[i] > x hacer 
                i=i+1 fmientras
            mientras a[j] < x hacer 
                j=j-1 fmientras

No hay comentarios:

Publicar un comentario