Ordenamiento Rápido (Quicksort)
El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n. Esta es la técnica de ordenamiento más rápida conocida. Fue desarrollada por C. Antony R. Hoare en 1960. El algoritmo original es recursivo, pero se utilizan versiones iterativas para mejorar su rendimiento (los algoritmos recursivos son en general más lentos que los iterativos, y consumen más recursos).
El algoritmo fundamental es el siguiente:
- Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote.
- Resituar los demás 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. 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 más de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados. Como se puede suponer, la eficiencia del algoritmo depende de la posición en la que termine el pivote elegido.
- En el mejor caso, el pivote termina en el centro de la lista, dividiéndola en dos sublistas de igual tamaño. En este caso, el orden de complejidad del algoritmo es O(n·log n).
- En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces de 0(n²). El peor caso dependerá de la implementación del algoritmo, aunque habitualmente ocurre en listas que se encuentran ordenadas, o casi ordenadas.
- En el caso promedio, el orden es O(n·log n).
Pseudocódigo
inicio variables A: arreglo[1..100] entero variables i,j,central:entero variables primero, ultimo: entero para i = 1 hasta 100 leer(A[i]) Fin para primero = 1 ultimo = 100 qsort(A[],100) Fin Funcion qsort(primero, ultimo:entero) i = primero j = ultimo central = A[(primero,ultimo) div 2] repetir mientras A[i]central j = j - 1 fin mientras si i < = j aux = A[i] A[j] = A[i] A[i] = aux i = i + 1 j = j - 1 fin si hasta que i > j si primero < j partir(primero,j) fin si si i < ultimo partir(i, ultimo) fin si fin funcion qsort
Diagrama de flujo Ordenamiento rápido

- Ordenamiento Quick Sort en Turbo Pascal
- Ordenamiento Quick Sort en Turbo C
- Menu de tres opciones, que rellena un vector, lo ordena por metodo Burbuja y Quicksort (compara sus tiempos), y lo vuelve a generar cuantas veces se necesite experimentar. trabajado en turbo pascal
Referencias
Victor
2006-12-27 03:31:41
Se que el diagrama se ve horrible, pero, pues, no hay de otra :D jeje. hice lo que pude en menos de una hora <a href="http://www.flickr.com/photos/victorrocha/435603594/" rel="nofollow">del examen</a> que hice en lenguajes algoritmos en primer semestre de la <a href="http://telematicanet.ucol.mx" rel="nofollow">facultad de telemática</a>.
emily aceituno
2007-04-23 13:16:33
me gustaria que pusieran mas distintas formas de hacer los programas.
Aprendizzzzz
2007-06-08 12:00:48
Hola escribo para ver si alguno tiene conocimeinto de como sería este algoritmo en paralelo.
Tengo que desarrollarlo en C usando MPI, pero tiene que ser quicksort paralelo
moshin
2007-08-14 21:32:23
Se me fue la onda con la liga, jeje.. http://www.andreimosso.com/?p=37
codbyte
2007-09-03 11:05:44
para mi el quicksort es demasiado bueno y se ejecuta mas rapido que el buble
y me gustaria con este mismo algoritmo ordenar nombre de un registro pesado que tengo.
Liquid D.
2007-11-10 21:29:50
Sobre el ejemplo de quick sort en Turbo C, hay un pequeño error en cuanto el uso de la matriz A. (no por parte de la función quick sort, sino en el main a la hora de usarla. Estáis declarando la matriz A[10] y usáis los valores del 1 al 10 de esa matriz, cosa que provoca un bucle infinito al generar los valores en el primer bucle de la función main.
Si la matriz es A[10] tan sólo puede contener de A[0] a A[9].
Un saludo y gracias por la información.
lili
2010-01-18 14:38:06
no entendi ni pio jajajajajajajaja
lili
2010-01-18 14:38:40
no entendi ni pio jajajajajaja
andriu
2010-04-27 11:48:58
necesito ayuda..... necesito ejemplos donde pueda utilizar los algoritmos de ordenamiento, ya sea seleccion, insercion, mergesort, quicksort rapido.... eso .... gracias de ante mano