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