You are on page 1of 5

Quicksort

El ordenamiento rpido (quicksort en ingls) es un algoritmo creado por el cientfico britnico en computacin C. A. R. Hoare basado en la tcnica de divide y vencers, que permite, en promedio, ordenar n elementos en un tiempo proporcional an log n. El algoritmo funciona de la siguiente forma: Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. 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.

Como se puede suponer, la eficiencia del algoritmo depende de la posicin en la que termine el pivote elegido. En el mejor caso, el pivote termina en el centro de la lista, dividindola en dos sublistas de igual tamao. En este caso, el orden de complejidad del algoritmo es O(nlog n). En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces de O(n). El peor caso depender de la implementacin del algoritmo, aunque habitualmente ocurre en listas que se encuentran ordenadas, o casi ordenadas. Pero principalmente depende del pivote, si por ejemplo el algoritmo implementado toma como pivote siempre el primer elemento del array, y el array que le pasamos est ordenado, siempre va a generar a su izquierda un array vaco, lo que es ineficiente. En el caso promedio, el orden es O(nlog n).

No es extrao, pues, que la mayora de optimizaciones que se aplican al algoritmo se centren en la eleccin del pivote.

Demostracin de un caso particular


Supongamos que el nmero de elementos a ordenar es una potencia de dos, es decir, para algn natural . Inmediatamente de divisiones que realizar el algoritmo. , donde k es el nmero

En la primera fase del algoritmo habr n comparaciones. En la segunda fase el algoritmo instanciar dos sublistas de tamao aproximadamente n/2. El nmero total de comparaciones de estas dos sublistas es: 2(n/2) = n. En la tercera fase el algoritmo procesar 4 sublistas ms, por tanto el nmero total de comparaciones en esta fase es 4(n/4) = n. En conclusin, el nmero total de comparaciones que hace el algoritmo es: , donde del algoritmo en el mejor caso es . , por tanto el tiempo de ejecucin

Parmetros: Se debe llamar a la funcin Quicksort desde donde quiera ejecutarse sta llamar a colocar pivote para encontrar el valor del mismo

Se ejecutar el algoritmo Quicksort de forma recursiva a ambos lados del pivote int colocar(int *v, int b, int t) { int i; int pivote, valor_pivote; int temp; pivote = b; valor_pivote = v[pivote]; for (i=b+1; i<=t; i++){ if (v[i] < valor_pivote){ pivote++; temp=v[i]; v[i]=v[pivote]; v[pivote]=temp; } } temp=v[b]; v[b]=v[pivote]; v[pivote]=temp; return pivote; }

void Quicksort(int* v, int b, int t) { int pivote; if(b < t){ pivote=colocar(v, b, t); Quicksort(v, b, pivote-1); Quicksort(v, pivote+1, t); } }

IIPARTE: Quicksort es un algoritmo de ordenacin desarrollado por Tony Hoare que, en promedio , hace hace comparaciones para ordenar n elementos. En el peor de los casos , se comparaciones, aunque este comportamiento es raro.Quicksort es a menudo

ms rpido en la prctica que otros algoritmos. [1] Adems, secuencial y localizado quicksort de referencias a la memoria funciona bien con una memoria cach . Quicksort puede ser implementado con unalgoritmo de divisin en el lugar , por lo que toda la ordenacin que se puede hacer con slo espacio adicional. [2]

Quicksort (tambin conocido como "una especie de particin de intercambio") es una especie de comparacin y, en implementaciones eficientes, no es una ordenacin estable .

Clase

Algoritmo de clasificacin

Peor de los casos el rendimiento

O (n 2)

Mejor de los casos el rendimiento

O (n log n)

El rendimiento promedio de los casos

O (n log n)

Peor de los casos la complejidad del espacio

O (n) auxiliar (ingenuo) O (log n) auxiliar

Algoritmo
Quicksort es un algoritmo de divide y vencers . Quicksort primero divide una gran lista en dos pequeas sub-listas: los elementos bajos y los elementos de alta. Quicksort puede ordenar de forma recursiva las sublistas. Los pasos son los siguientes: 1. Elija un elemento, llamado un pivote , de la lista. 2. Reordenar la lista para que todos los elementos con valores menores que el pivote viene antes de que el pivote, mientras que todos los elementos con valores mayores que el pivote de venir despus de l (los mismos valores pueden ir en cualquier direccin). Despus de esta particin, el pivote se encuentra en su posicin final. Esto se llama la operacin de particin. 3. Recursiva ordenar la lista de sub-elementos menores y la sub-lista de mayores elementos. El caso base de la recursividad son las listas de tamao cero o uno, que nunca deben ser ordenados.

Versin sencilla
En sencilla pseudocdigo , el algoritmo se puede expresar as: la funcin quicksort ('array') si la longitud ('array') 1 Los 'conjuntos' de retorno / / una serie de cero o uno los elementos ya est ordenado seleccionar y eliminar 'girar' un valor pivote de la 'matriz' crear listas vacas "menos" y "mayor" para cada 'x' en 'serie' si 'x' 'giro' y luego agregar 'x' a 'menos' agregar otra 'x' a la 'mayor' volver concatenar (quicksort ("menos"), 'pivote', quicksort ('mayor')) / / dos llamadas recursivas

Ejemplo completo de quicksort en un conjunto de nmeros aleatorios. El elemento de sombreado es el eje.Siempre es elegido como el ltimo elemento de la particin. Sin embargo, eligiendo siempre el ltimo elemento de la particin como el pivote de esta manera los resultados en el desempeo de los pobres ( ) En las listas que ya estn ordenados, o listas de elementos idnticos. Como sub-listas de

clasificados / cultivo elementos idnticos hasta mucho hacia el final de un procedimiento de clasificacin en un gran conjunto, las versiones del algoritmo quicksort que opten por el pivote como el elemento central ejecuta mucho ms rpido que el algoritmo descrito en este diagrama de la grandes conjuntos de nmeros.

Observe que slo examinar los elementos comparndolos con otros elementos. Esto hace quicksort una especie de comparacin . Esta versin es tambin una ordenacin

estable (suponiendo que el "para cada" mtodo recupera los elementos en el orden original, y el pivote seleccionado es el ltimo lugar entre los de igual valor). La correccin del algoritmo de particin se basa en los siguientes dos argumentos: En cada iteracin, todos los elementos hasta ahora son transformados en la posicin deseada: antes del pivote si es inferior a un valor del pivote, despus el pivote si es mayor que el valor del pivote ( bucle invariante ). Cada iteracin deja un elemento menos a procesar ( variante de bucle ).

La exactitud del algoritmo global puede ser probada a travs de la induccin: para el cero o un elemento, el algoritmo deja los datos sin cambios, por un conjunto de datos ms grandes establecido que produce la concatenacin de dos partes, los elementos menores que el pivote y los elementos mayor que ella, se ordenados por la hiptesis recursiva. VER GIF:

Un ejemplo de quicksort.

En lugar de particin en la accin en una pequea lista. El elemento de caja es el elemento pivote, los elementos de color azul son menos o igual, y los elementos rojos son ms grandes.

You might also like