transparencias del método de clasificación quicksort
TRANSCRIPT
![Page 1: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/1.jpg)
ALGORITMOS DE CLASIFICACIÓN INTERNA
1) Inserción directa. Mejoras:
1) Inserción Binaria
2) Selección directa
2) Intercambio directo (Burbuja)
3) Inserción con incrementos decrecientes (Shell)
4) Método del montículo (“Heapsort”)
5) Método rápido (“Quicksort”)
![Page 2: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/2.jpg)
QUICKSORT = METODO DE ORDENAMIENTO RÁPIDO
El ordenamiento rápido (quicksort en ingles) es un algoritmo basado en la
técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en una complejidad de n log n. Es la técnica de
ordenamiento más rápida conocida.
![Page 3: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/3.jpg)
Fue Charles Antony Richard Hoare un científico Británico en
computación, quien en 1960 invento el método de
ordenación mas rápido, “Quicksort”,. También se le
conoce por el desarrollo de la Lógica de Hoare, y el lenguaje
formal CSP.
![Page 4: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/4.jpg)
El algoritmo fundamental es el siguiente :
1º Elegimos un elemento del vector, puede ser cualquiera. Lo llamaremos elemento de división o pivote.
Pivote o elemento de división
La forma más efectiva es coger como pivote el elemento intermedio
![Page 5: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/5.jpg)
2º Buscamos la posición que le corresponde en el vector al pivote y ordenamos los elementos de la lista de manera que a lado queden los menores y a otro los mayores.
PIVOTE
Mayores Menores
![Page 6: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/6.jpg)
3º Realizamos esto de forma recursiva para que cada “subvector” mientras este tengan un largo mayor que 1
![Page 7: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/7.jpg)
EJEMPLO. QUICKSORT ITERATIVO
8 1 4 9 6 3 5 2 7 0
Pivote = 6 izq=1 inf=1
der=10 sup=10
0 1 4 9 6 3 5 2 7 8
Pivote = 6 izq=1 der=10 inf=2 sup=9
0 1 4 9 6 3 5 2 7 8
Pivote = 6 izq=1 der=10 inf=3 sup=9
0 1 4 9 6 3 5 2 7 8
Pivote = 6 izq=1 der=10 inf=4 sup=9
cima=0
![Page 8: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/8.jpg)
EJEMPLO. QUICKSORT ITERATIVO
0 1 4 9 6 3 5 2 7 0
Pivote = 6 izq=1 der=10
0 1 4 2 6 3 5 9 7 8
Pivote = 6 inf=5
izq=1 der=10 sup=7
0 1 4 2 5 3 6 9 7 8
Pivote = 6 izq=1 der=10 inf=6 sup=6
0 1 4 2 5 3 6 9 7 8
Pivote = 6 inf=7
izq=1 der=10 sup=6
sup=8 inf=4
![Page 9: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/9.jpg)
EJEMPLO. QUICKSORT ITERATIVO
0 1 4 2 5 3 6 9 7 8
Pivote = 9 der=10 sup=10
0 1 4 2 5 3 6 9 7 8
Pivote = 9 inf=8
der=10 sup=10
izq=7
0 1 4 2 5 3 6 8 7 9
izq=7 der=10 Pivote = 9
sup=9 Inf=9
0 1 4 2 5 3 6 8 7 9
izq=7 der=10 Inf = 10 Pivote = 9
sup=9
cima=1 Lim_izq=1 Lim_der=6
izq=7 inf=7
cima=2 Lim_izq=7 Lim_der=9
![Page 10: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/10.jpg)
Algoritmo Quicksort recursivo PROCEDIMIENTO quicksort (a: tipo_vector (E/S), izq: entero (E), der: entero (E))
VAR i,j: entero x,w: tipo_elemento INICIO
iizq jder xa [(izq+der)/2] Mientras (i<=j) hacer Mientras (a[i].clave<x.clave) hacer ii+1 Fin_mientras Mientras (x.clave<a[j].clave) hacer jj-1 Fin_mientras Si (i<=j) entonces wa[i] a[i]a[j] a[j]w ii+1 jj-1 Fin_si Fin_mientras Si (izq<j) entonces LLAMAR A quicksort (a,izq,j) Fin_si Si (i<der) entonces LLAMAR A quicksort (a,i,der) Fin_si
FIN_PROCEDIMIENTO
![Page 11: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/11.jpg)
Algoritmo Quicksort iterativo [1] TIPO tipo_pila= REGISTRO
izq, der : entero FIN_REGISTRO TIPO tpila=vector [Max] de tipo_pila
PROCEDIMIENTO quicksort_pila (a: tipo_vector (E/S))
VAR i, j, izq, der, cima: entero x,w: tipo_elemento pila: tpila
INICIO
cima0 pila [0].izq0 pila [0].dern-1 Mientras (cima>=0) hacer izqpila [cima].izq derpila [cima].der cimacima-1
1 2
![Page 12: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/12.jpg)
Algoritmo Quicksort iterativo [2]
Mientras (izq<der) hacer iizq jder xa [(izq+der)/2 Mientras (i<=j) hacer Mientras (a[i].clave<x.clave) hacer ii+1 Fin_mientras Mientras (x.clave<a[j].clave) hacer jj-1 Fin_mientras Si (i<=j) entonces
wa[i] a [i]a[j] a [j]w ii+1 jj-1 Fin_si Fin_mientras
1 2
1 2
![Page 13: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/13.jpg)
Algoritmo Quicksort iterativo [3]
Si ((j-izq) < (der-i)) entonces Si (i<der) entonces cimacima+1 pila [cima].izqi pila [cima].derder Fin_si derj Si_no Si (j>izq) entonces cimacima+1 pila [cima].izqizq pila [cima].derj Fin_si izqi Fin_si
Fin_mientras Fin_mientras FIN_PROCEDIMIENTO
1 2
![Page 14: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/14.jpg)
COMPLEJIDAD
• Mejor caso: Pivote en el centro de la lista. Orden de complejidad del algoritmo: O(n·logn).
• Peor caso: Pivote en un extremo de la lista. Orden de complejidad del algoritmo: O (n²). Suele producirse en algoritmos ordenados o casi ordenados.
• Caso promedio: el orden es O (n·log n).
![Page 15: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/15.jpg)
Conclusiones
Ventajas:
• Su orden de complejidad. • Muy rápido. • No requiere memoria adicional para su forma
recursiva, aunque para la iterativa sí que necesita espacio adicional (para la pila).
![Page 16: Transparencias del Método de Clasificación Quicksort](https://reader034.vdocuments.co/reader034/viewer/2022042607/5571f37749795947648e1229/html5/thumbnails/16.jpg)
Conclusiones
Desventajas:
• Es muy poco estable. • La complejidad depende de donde elijamos el pivote,
aunque lo más adecuado es elegirlo en el centro. • Implementación algo complicada. • El algoritmo en su forma recursiva emplea muchos
recursos. • Mucha diferencia entre el peor y el mejor caso.