Sie sind auf Seite 1von 15

Introduccin al algoritmo de

ordenacin QuickSort
Jos Pino
Quicksort
El mejor algoritmo de ordenacin conocido
actualmente (el ms eficiente).
Basado en la tcnica divide y vencers.
O(nlogn)
menores pivot mayores
Elegir un elemento de la lista de elementos a ordenar, al que llamaremos
pivot.
Resituar los dems elementos de la lista a cada lado del pivote, de manera
que a un lado queden todos los menores que l, y al otro los mayores. Los
elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda,
dependiendo de la implementacin deseada. En este momento, el pivote ocupa exactamente el
lugar que le corresponder en la lista ordenada.
La lista queda separada en dos sublistas, una formada por los elementos a
la izquierda del pivote, y otra por los elementos a su derecha.
Repetir este proceso de forma recursiva para cada sublista mientras stas
contengan ms de un elemento. Una vez terminado este proceso todos los
elementos estarn ordenados.
void quicksort (int[] a, int lo, int hi)
{
int i=lo, j=hi, h;
int x=a[(lo+hi)/2];
do
{
while (a[i]<x) i++;
while (a[j]>x) j--;
if (i<=j)
{
h=a[i]; a[i]=a[j]; a[j]=h;
i++; j--;
}
} while (i<=j);
if (lo<j) quicksort(a, lo, j);
if (i<hi) quicksort(a, i, hi);
}
Ejemplo sencillo de QuickSort
Supongamos tenemos un arreglo con una serie de
nmeros desordenados y queremos ordenar por
el mtodo de Quicksort:
[7,8,14,12,2,1,3,21]
Seleccionamos un pivot, por ejemplo el 12
[7,8,14,12,2,1,3,21]
Pivot = 12
Ahora movemos todos los menores al pivot a la
izquierda del pivot y los mayores a la derecha del
pivot
[7,8,14,12,2,1,3,21] Original
[7,8,2,1,3,12,14,21]
Los menores al pivot a la izquierda
Los mayores al pivot a la derecha
[7,8,2,1,3,12,14,21]
El 12 ya est ordenado
[7,8,2,1,3,12,14,21]
Ahora tenemos dos sub-arreglos de nmeros,
por un lado los que estn a la izquierda del pivot
y por otro los que estn a la derecha.
[7,8,2,1,3,12,14,21]
Consideramos el sub-arreglo de la izquierda:
[7,8,2,1,3,12,14,21]
Seleccionamos un nuevo pivot para el nuevo sub-
arreglo de la izquierda.
[7,8,2,1,3,12,14,21]
Seleccionamos el pivot del sub-arreglo
Pivot = 2
[7,8,2,1,3,12,14,21]
[7,8,2,1,3,12,14,21]
Nuevamente movemos los menores al pivot a su
izquierda y los mayores a su derecha.
[7,8,2,1,3,12,14,21]
[1,2,3,7,8,12,14,21]
[1,3,2,7,8,12,14,21]
El 2 ya est ordenado al igual que el 12
[1,3,2,7,8,12,14,21]
Cuidado: el 1,3,7,8,14,21 an no estn ordenados
Se repite recursivamente hasta tener todos
ordenados
[1,2,3,7,8,12,14,21]
Estructura de Datos en Java, Mark Allen Weiss.
A practical Introduction to data structures and algorithmanalysys. Java
Edition. Clifford A. Shaffer.
Introduction to Algorithm.2nd edition. Cormen, Leiserson, Rivest & Stein.
Estructura de datos y algoritmos. Aho, HopCroft & Ullman.
Algoritmos y estructura de datos. Niklaus Wirth.
Estructura de datos y algoritmos. Mark Allen Weiss.
La prctica de la programacin. Brian Kernighan & Rob Pike.
The AlgorithmDesign Manual by Steve Skiena
AlgorithmDesign by Jon Kleinberg and va Tardos
Introduction to the Design and Analysis of Algorithms (2nd Edition)

Das könnte Ihnen auch gefallen