2. Historia
El ordenamiento rápido (quicksort en
inglés) es un algoritmo creado por el
científico británico en computación
Charles Anthony Richard Hoare
(Colombo, Sri Lanka, 11 de enero de
1934). Hoare 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.
3. ¿En que consiste?
El método Quiscksort en pocas
palabras consiste en tomar un punto
de referencia, al que se le llama
pivote, e ir verificando dato a dato por
los dos extremos del arreglo con el
uso de dos punteros, un izquierdo y
un derecho para comprobar si el valor
verificado es mas grande o mas
pequeño que nuestro pivote e ir
intercambiando los valores en caso de
ser necesario.
4. Algoritmo
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. Los elementos iguales al
pivote pueden ser colocados tanto a su
derecha como a su izquierda, dependiendo
de la implementación deseada.
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.
5. 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
implementación 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 vacío, lo que es
ineficiente.
En el caso promedio, el orden es O(n•log
n).
8. Nuestro pivote es el primer dato de la
izquierda
4
5 2 3 6 1
I D
pivote
9. El espacio vacio de la Izquierda es donde
podríamos realizar el intercambio,
comenzaremos a verificar los datos por la
Derecha
4
5 2 3 6 1
I D
Aquí
quedo un
espacio
vacio
10. Los datos menores que 4 irán al lado
izquierdo y los mayores que 4 irán al
lado derecho
4
5 2 3 6 1
I D
Aquí
quedo un
espacio
vacio
MAYORE
S
MENORE
S
15. Verificar el lado derecho
4
52 3 61
I
D
Aquí
quedo un
espacio
vacio
¿6>4
?
16. Verificar el lado derecho
4
52 3 61
I
D
Aquí
quedo un
espacio
vacio
¿6>4
?6 es mayor que 4 y ya esta en
Lugar correspondiente, lo que
Corresponde hacer es recorrer
Nuevamente el puntero derecho
Recorrer
17. Verificar el lado derecho
4
52 3 61
I D
Aquí
quedo un
espacio
vacio
¿3>4
?
20. Se han juntado los punteros!
4 523 61
I
D
El 4 ha encontrado su lugar!
El 4 ya esta ordenado, los valores menores
Que 4 están a su lado izquierdo y los
Mayores al derecho
21. Análisis de la situación
4 523 61
Tenemos dos arreglos resultantes con los que debemos
Realizar el mismo procedimiento cada uno con sus
Respectivos punteros izquierdo y derecho…
Arreglo A
Arreglo B
I D I D
Es un buen momento para mencionar que este método es Recursivo. En esta p
Es donde la recursividad se hace presente, invocándose el mismo algoritmo an
Visto, ahora para Arreglo A y nuevamente para Arreglo B.
22. Hay que realizar el mismo
procedimiento (esta vez de una
manera mas breve)
4 523 6
1
I D
35. Nuestra clase Quicksort
contiene:Este método simplemente hace que nuestro
Arreglo original sea igual a el nuevo, ya ordenado
Pero nos envía a quicksort1…
36. quicksort1
Este método solo nos manda a quicksort2 con
Instrucciones un poco mas especificas, punteros y el arreglo.
37. quicksort2
Aquí se desarrolla por completo el
algoritmo Quicksort para ordenamiento
de datos, y por lo tanto se pone un poco
complicado…