Está en la página 1de 40

Metodo

Quicksort
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.
¿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.
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.
 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).
¿Cómo funciona?
Supongamos que este es nuestro
arreglo de datos

4 5 2 3 6 1
Ahora colocaremos los dos punteros y
el pivote

I D

4 5 2 3 6 1

Pivote
Nuestro pivote es el primer dato de la
izquierda

I D

5 2 3 6 1

pivote
4
El espacio vacio de la Izquierda es donde
podríamos realizar el intercambio,
comenzaremos a verificar los datos por la
Derecha
I D

Aquí
quedo un 5 2 3 6 1
espacio
vacio

4
Los datos menores que 4 irán al lado
izquierdo y los mayores que 4 irán al
lado derecho

I D

Aquí
quedo un 5 2 3 6 1
espacio
vacio

MENORE MAYORE
S 4 S
Comenzamos…

I D

Aquí
quedo un 5 2 3 6 1
espacio
vacio

¿1>4?
Intercambio

Recorrer
I D

Aquí
quedo un
1 5 2 3 6
espacio
vacio

4
Verificar del lado izquierdo

I
D

Aquí
quedo un
1 5 2 3 6
espacio
vacio

¿5>4? 4
Intercambio…

Recorrer
I
D

Aquí
quedo un
1 2 3 6 5
espacio
vacio

4
Verificar el lado derecho

I
D

Aquí
quedo un
1 2 3 6 5
espacio
vacio

4 ¿6>4
?
Verificar el lado derecho

Recorrer
I
D

Aquí
quedo un
1 2 3 6 5
espacio
vacio

4 ¿6>4
6 es mayor que 4 y ya esta en
?
Lugar correspondiente, lo que
Corresponde hacer es recorrer
Nuevamente el puntero derecho
Verificar el lado derecho

I D

Aquí
quedo un
1 2 3 6 5
espacio
vacio

¿3>4
4
?
Intercambiar y recorrer…

Recorrer
I D

Aquí
quedo un
1 3 2 espacio 6 5
vacio

4
Recorrer…

Recorrer D
I

Aquí
quedo un
1 3 2 espacio 6 5
vacio

El 2 ya es menor
Que el 4, se queda en esa 4
Posición.
Se han juntado los punteros!
I

1 3 2 4 6 5

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
Análisis de la situación

Tenemos dos arreglos resultantes con los que debemos


Realizar el mismo procedimiento cada uno con sus
Respectivos punteros izquierdo y derecho…
I D I D

1 3 2 4 6 5

Arreglo A
Arreglo B
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.
Hay que realizar el mismo
procedimiento (esta vez de una
manera mas breve)

I D

3 2 4 6 5

1
I D

3 2 4 6 5

1
Los datos quedaron exactamente
D igual porque 1 ya
esta en su posición correspondiente
I

3 2 4 6 5
1
Análisis de la situación…

I D
I D

1 3 2 4 6 5

Arreglo A Arreglo B
Repetir proceso

I D

1 3 2 4 6 5
Repetir proceso

I D

1 2 4 6 5

3
Repetir proceso

I D

1 4 6 5
2

3
El arreglo A
Ha quedado I
Ordenado
correctamente
D

1 4 6 5
2 3

Arreglo A Arreglo B

Aun hay que realizar


El proceso para Arreglo B
Repetir proceso…

I D

1 4 6 5
2 3
Repetir proceso…

I D

1 4 5
2 3

6
Repetir proceso…
I

1 2 3 4 5

6
Éxito! I

1 2 3 4 5 6

Nuestros datos ya están ordenados


Correctamente con el método
Quicksort!
Código Java…
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…


quicksort1
Este método solo nos manda a quicksort2 con
Instrucciones un poco mas especificas, punteros y el arreglo.
quicksort2
Aquí se desarrolla por completo el
algoritmo Quicksort para ordenamiento
de datos, y por lo tanto se pone un poco
complicado…
Ya ordenados los datos el control vuelve a main

También podría gustarte