Download - Método de Heapsort
![Page 1: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/1.jpg)
Unidad VII – Estructura de datos
Ordenamientos internosMétodo Heapsort
ordenamiento por montículos
Deini Resendiz BenitezMartin Pacheco Chavez
![Page 2: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/2.jpg)
Método Heapsort• El método de ordenación heapsort se
conoce también como por ordenación por montículos, y trabaja con montículos máximos.
• Es necesario saber que es un montículo, la inserción y eliminación de los elementos, para el entendimiento de este método.
![Page 3: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/3.jpg)
¿Qué es un montículo?
• Un montículo se define como: Una estructura basada en un árbol, donde cada nodo padre es mayor a sus nodos hijos y además toda la estructura esta balanceada.
![Page 4: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/4.jpg)
Existen:• Los montículos máximos tienen la
característica de que cada nodo padre tiene un valor mayor que el de cualquiera de sus nodos hijos.
• Los montículos mínimos, el valor del nodo padre es siempre menor al de sus nodos hijos.
![Page 5: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/5.jpg)
Método Heapsort• Este método es el más eficiente de los métodos de ordenación que
trabajan con estructuras tipo arboles. La idea central de este algoritmo se basa en dos operaciones:
1. Construir un montículo.2. Eliminar la raíz del montículo en forma repetida.
![Page 6: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/6.jpg)
Árbol binario de búsqueda Montículo máximo
60
46 79
6530 55
79
55 65
6030 46
Gráficamente
![Page 7: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/7.jpg)
Árbol binario de búsqueda Montículo mínimo
60
46 79
6530 55
30
46 60
6579 55
Gráficamente
![Page 8: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/8.jpg)
No se considera como montículo si los niveles no se encuentran balanceados
Estructura no balanceada
79
65
55
60
46
30
![Page 9: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/9.jpg)
Para balancearlo habría que reacomodar los elementos.
Estructura balanceada
79
55 65
6030 46
![Page 10: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/10.jpg)
79
55 65
6030 46
79 > 55 & 65
55 > 30 & 46 65 > 60
Todos los nodos son mayores a sus hijos.
Montículo máximo
![Page 11: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/11.jpg)
• Para representar un montículo en un arreglo se debe considerar lo siguiente.
• Teniendo el nodo padre en la posición K:– Su hijo izquierdo es 2 * K.– Su hijo derecho es 2 * K + 1.
![Page 12: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/12.jpg)
Montículo máximo representado en un arreglo
79
55 65
6030 46
79 55 65 30 46 60
1 2 3 4 5 6
Para cualquier nodo K:Su hijo izquierdo es 2 * K.Su hijo derecho es 2 * K + 1.
A
![Page 13: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/13.jpg)
79 55 65 30 46 60
1 2 3 4 5 6
Para cualquier nodo K:Su hijo izquierdo es 2 * K.Su hijo derecho es 2 * K + 1.
Ejemplo. Si K = 2, entonces:Su hijo Izquierdo es: A[2*k] = A[2*2] = A[4]
El hijo izquierdo de A[2] es A[4]
A
Calculo de Hijos
79
55 65
6030 46
![Page 14: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/14.jpg)
79 55 65 30 46 60
1 2 3 4 5 6
Para cualquier nodo no raíz K:Su padre es K/2.
Si K es impar, se considera K/2 - 0.5
Ejemplo. Si K = 5, entonces:Su padre es: A[K/2] = A[5/2-0.5] = A[2]
El padre de A[5] es A[2]
A
Calculo de Padres
79
55 65
6030 46
![Page 15: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/15.jpg)
Algoritmo de inserción1. Se inserta el elemento en la primera posición
disponible.2. Se verifica si su valor es mayor que el de su padre.
Si se cumple esta condición, entonces se efectúa el intercambio. Si no, entonces el algoritmo se detiene y el elemento queda ubicado en su posición correcta.*** El paso 2 se aplica de manera recursiva mientras el elemento tenga un padre.
![Page 16: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/16.jpg)
1. Construcción de un montículo
• Se dan n valores enteros cualquiera:
15 60 08 16 44 27 12 35
![Page 17: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/17.jpg)
Inserción de 15 15 60 08 16 44 27 12 35
Considerando que se tiene un montículo vacío:
1515
raíz
Paso 1:El numero 15 llega en la primera posición disponible.
Algoritmo:
![Page 18: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/18.jpg)
Inserción de 60 15 60 08 16 44 27 12 35
15 60
15
raíz
60
Paso 1:El numero 60 llega en la primera posición disponible.
Algoritmo:
![Page 19: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/19.jpg)
Inserción de 60 15 60 08 16 44 27 12 35
15 60
15
raíz
60
Paso 2:Se verifica si 60 es mayor a su padre, en este caso 15.
¿60 > 15?
Algoritmo:
![Page 20: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/20.jpg)
Inserción de 60 15 60 08 16 44 27 12 35
60 15
60
raíz
15
Paso 2:Como 60 si es mayor a 15, se efectúa un intercambio. Después de esto la inserción finaliza.
Algoritmo:
![Page 21: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/21.jpg)
Inserción de 08 15 60 08 16 44 27 12 35
60 15 08
60
raíz
15
Paso 1:El numero 08 llega en la primera posición disponible.
Algoritmo:
08
![Page 22: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/22.jpg)
Inserción de 08 15 60 08 16 44 27 12 35
60 15 08
60
raíz
15
Paso 2:Se verifica si 8 es mayor a su padre, en este caso 60.
Algoritmo:
08
¿8 > 60?
![Page 23: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/23.jpg)
Inserción de 08 15 60 08 16 44 27 12 35
60 15 08
60
raíz
15
Paso 2:Como 8 no es mayor a 60, el algoritmo finaliza y la inserción finaliza.
Algoritmo:
08
![Page 24: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/24.jpg)
Inserción de 16 15 60 08 16 44 27 12 35
60 15 08 16
60
raíz
15
Paso 1:El numero 16 llega en la primera posición disponible.
Algoritmo:
08
16
![Page 25: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/25.jpg)
Inserción de 16 15 60 08 16 44 27 12 35
60 15 08 16
60
raíz
15
Paso 2:Se verifica si 16 es mayor a su padre, en este caso 15.
Algoritmo:
08
16 ¿16 > 15?
![Page 26: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/26.jpg)
Inserción de 16 15 60 08 16 44 27 12 35
60 16 08 15
60
raíz
16
Paso 2:Como 16 si es mayor a 15, se efectúa un intercambio. Se aplica la recursividad del paso 2.
Algoritmo:
08
15
![Page 27: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/27.jpg)
Inserción de 16 15 60 08 16 44 27 12 35
60 16 08 15
60
raíz
16
Paso 2:Se verifica si 16 es mayor a su padre, en este caso 60.
Algoritmo:
08
15 ¿16 > 60?
![Page 28: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/28.jpg)
Inserción de 16 15 60 08 16 44 27 12 35
60 16 08 15
60
raíz
16
Paso 2:Como 16 no es mayor a 60, el algoritmo finaliza y la inserción finaliza.
Algoritmo:
08
15
![Page 29: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/29.jpg)
Inserción de 44 15 60 08 16 44 27 12 35
60 16 08 15 44
60
raíz
16
Paso 1:El numero 44 llega en la primera posición disponible.
Algoritmo:
08
15 44
![Page 30: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/30.jpg)
Inserción de 44 15 60 08 16 44 27 12 35
60 16 08 15 44
60
raíz
16
Paso 2:Se verifica si 44 es mayor a su padre, en este caso 16.
Algoritmo:
08
15 44 ¿44 > 16?
![Page 31: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/31.jpg)
Inserción de 44 15 60 08 16 44 27 12 35
60 44 08 15 16
60
raíz
44
Paso 2:Como 44 si es mayor a 16, se efectúa un intercambio. Se aplica la recursividad del paso 2.
Algoritmo:
08
15 16
![Page 32: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/32.jpg)
Inserción de 44 15 60 08 16 44 27 12 35
60 44 08 15 16
60
raíz
44
Paso 2:Se verifica si 44 es mayor a su padre, en este caso 60.
Algoritmo:
08
15 16 ¿44 > 60?
![Page 33: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/33.jpg)
Inserción de 44 15 60 08 16 44 27 12 35
60 44 08 15 16
60
raíz
44
Paso 2:Como 44 no es mayor a 60, el algoritmo finaliza y la inserción finaliza.
Algoritmo:
08
15 16
![Page 34: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/34.jpg)
Inserción de 27 15 60 08 16 44 27 12 35
60 44 08 15 16 27
60
raíz
44
Paso 1:El numero 27 llega en la primera posición disponible.
Algoritmo:
08
15 16 27
![Page 35: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/35.jpg)
Inserción de 27 15 60 08 16 44 27 12 35
60 44 08 15 16 27
60
raíz
44
Paso 2:Se verifica si 27 es mayor a su padre, en este caso 8.
Algoritmo:
08
15 16 27
¿27 > 8?
![Page 36: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/36.jpg)
Inserción de 27 15 60 08 16 44 27 12 35
60 44 27 15 16 8
60
raíz
44
Paso 2:Como 27 si es mayor a 8, se efectúa un intercambio. Se aplica la recursividad del paso 2.
Algoritmo:
27
15 16 08
![Page 37: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/37.jpg)
Inserción de 27 15 60 08 16 44 27 12 35
60 44 27 15 16 8
60
raíz
44
Paso 2:Se verifica si 27 es mayor a su padre, en este caso 60.
Algoritmo:
27
15 16 08
¿27 > 60?
![Page 38: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/38.jpg)
Inserción de 27 15 60 08 16 44 27 12 35
60 44 27 15 16 8
60
raíz
44
Paso 2:Como 27 no es mayor a 60, el algoritmo finaliza y la inserción finaliza.
Algoritmo:
27
15 16 08
![Page 39: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/39.jpg)
Inserción de 12 15 60 08 16 44 27 12 35
60 44 27 15 16 8 12
60
raíz
44
Paso 1:El numero 12 llega en la primera posición disponible.
Algoritmo:
27
15 16 08 12
![Page 40: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/40.jpg)
Inserción de 12 15 60 08 16 44 27 12 35
60 44 27 15 16 8 12
60
raíz
44
Paso 2:Se verifica si 12 es mayor a su padre, en este caso 27.
Algoritmo:
27
15 16 08 12
¿12 > 27?
![Page 41: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/41.jpg)
Inserción de 12 15 60 08 16 44 27 12 35
60 44 27 15 16 8 12
60
raíz
44
Paso 2:Como 12 no es mayor a 27, el algoritmo finaliza y la inserción finaliza.
Algoritmo:
27
15 16 08 12
![Page 42: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/42.jpg)
Inserción de 35 15 60 08 16 44 27 12 35
60 44 27 15 16 8 12 35
60
raíz
44
Paso 2:El numero 35 llega en la primera posición disponible.
Algoritmo:
27
15 16 08 12
35
![Page 43: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/43.jpg)
Inserción de 35 15 60 08 16 44 27 12 35
60 44 27 15 16 8 12 35
60
raíz
44
Paso 2:Se verifica si 35 es mayor a su padre, en este caso 15.
Algoritmo:
27
15 16 08 12
35 ¿35 > 15?
![Page 44: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/44.jpg)
Inserción de 35 15 60 08 16 44 27 12 35
60 44 27 35 16 8 12 15
60
raíz
44
Paso 2:Como 35 si es mayor a 15, se efectúa un intercambio. Se aplica la recursividad del paso 2.
Algoritmo:
27
35 16 08 12
15
![Page 45: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/45.jpg)
Inserción de 35 15 60 08 16 44 27 12 35
60 44 27 35 16 8 12 15
60
raíz
44
Paso 2:Se verifica si 35 es mayor a su padre, en este caso 44.
Algoritmo:
27
35 16 08 12
15 ¿35 > 44?
![Page 46: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/46.jpg)
Inserción de 35 15 60 08 16 44 27 12 35
60 44 27 35 16 8 12 15
60
raíz
44
Paso 2:Como 35 no es mayor a 44, el algoritmo finaliza y la inserción finaliza.
Algoritmo:
27
35 16 08 12
15
![Page 47: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/47.jpg)
15 60 08 16 44 27 12 35
De los números:
60 44 27 35 16 8 12 15
Se obtiene el montículo:
60
raíz
44 27
35 16 08 12
15
![Page 48: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/48.jpg)
Construcción de Montículos - Métodos necesarios.
//int a[] es el monticulo. int i es el hijo.public static int padre(int a[], int i){ //Si i es la raíz, no tiene padre, por lo tanto regresa un -1. if(i == 0) return -1; //Regresa -1. else return (i - 1)/ 2; //Regresa la posición del padre del elemento i.}
Este método regresa la posición del padre de un elemento en un montículo. El único elemento que no tiene padre, es el elemento a[0], la cual es la raíz.
![Page 49: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/49.jpg)
Construcción de Montículos - Métodos necesarios.
//int a[] es el monticulo. int i es el hijo.public static int hijoIzq(int a[], int i){
//Si i NO tiene hijo izquierdo, entonces if(2*i+1 >= a.length) //Regresa -1 return -1; //Si no else //Regresa la posicion del hijo izquierdo. return (2 * i + 1);}
Este método regresa la posición en el arreglo del hijo izquierdo del elemento i.Retorna un -1 si el elemento no tiene hijo izquierdo.
![Page 50: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/50.jpg)
Construcción de Montículos - Métodos necesarios.
//int a[] es el monticulo. int i es el hijo.public static int hijoDer(int a[], int i){
//Si i NO tiene hijo izquierdo, entonces if((2*i+1)+1 >= a.length) //Regresa -1 return -1; //Si no else //Regresa la posicion del hijo izquierdo. return (2 * i + 1) + 1;}
Este método regresa la posición en el arreglo del hijo derecho del elemento i.Retorna un -1 si el elemento no tiene hijo derecho.
![Page 51: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/51.jpg)
Construcción de Montículos - Métodos necesarios.private static int[] hacerMonticulo(int a[]){ int n = a.length; for (int i = 0; i < n; i++) { //Si tiene padre, entonces if(padre(a, i) != -1){ //Se busca al padre de i y se asigna el valor. int padre = a[padre(a, i)]; //Si el elemento i es mayor que el padre, entonces. if(a[i] > padre){ //Hacer el intercambio. int aux = padre; a[padre(a, i)] = a[i]; a[i] = aux; //Se realiza de nuevo el metodo de manera recursiva. hacerMonticulo(a); } } } return a; //Regresar lo resultante de a. }
![Page 52: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/52.jpg)
Método Heapsort• Una vez hecha la construcción de un montículo partiendo de un
arreglo, se puede proceder a el paso 2 del método de ordenación.
*** El efecto de ordenación, surge una vez realizando el paso 2. ***
1. Construir un montículo.
2. Eliminar la raíz del montículo en forma repetida.
![Page 53: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/53.jpg)
2. Eliminación de la raíz.
• El proceso para obtener los elementos ordenados se efectúa eliminando la raíz del montículo de forma repetida n veces.
![Page 54: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/54.jpg)
Algoritmo de eliminación1. Se remplaza la raíz con el elemento que ocupa la ultima
posición del montículo.2. Se crea un montículo con los elementos restantes.
![Page 55: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/55.jpg)
60 44 27 35 16 8 12 15
Dado el montículo:
60
raíz
44 27
35 16 08 12
15
![Page 56: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/56.jpg)
Eliminación de 60
60
raíz
44
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento
Algoritmo:
27
35 16 08 12
15
60 44 27 35 16 8 12 15
![Page 57: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/57.jpg)
Eliminación de 60
15
raíz
44
Paso 1:60 es remplazado por 15. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
27
35 16 08 12
15 44 27 35 16 8 12 60
![Page 58: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/58.jpg)
Eliminación de 60
Paso 2:Se crea un montículo con los elementos restantes
Algoritmo:
15
raíz
44 27
35 16 08 12
15 44 27 35 16 8 12 60
![Page 59: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/59.jpg)
Eliminación de 60
44
raíz
25
Paso 2:Se crea un montículo con los elementos restantes
Algoritmo:
27
15 16 8 12
44 35 27 15 16 8 12 60
![Page 60: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/60.jpg)
Eliminación de 44
44
raíz
25
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento
Algoritmo:
27
15 16 8 12
44 35 27 15 16 8 12 60
![Page 61: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/61.jpg)
Eliminación de 44
12
raíz
25
Paso 1:44 es remplazado por 12. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
27
15 16 8
12 35 27 15 16 8 44 60
![Page 62: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/62.jpg)
Eliminación de 44
12
raíz
25
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
27
15 16 8
12 35 27 15 16 8 44 60
![Page 63: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/63.jpg)
Eliminación de 44
35
raíz
16
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
27
12 15 8
35 16 27 12 15 8 44 60
![Page 64: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/64.jpg)
Eliminación de 35
35
raíz
16
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento.
Algoritmo:
27
12 15 8
35 16 27 12 15 8 44 60
![Page 65: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/65.jpg)
Eliminación de 35
8
raíz
16
Paso 1:35 es remplazado por 8. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
27
12 15
8 16 27 12 15 35 44 60
![Page 66: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/66.jpg)
Eliminación de 35
35
raíz
16
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
27
12 15
8 16 27 12 15 35 44 60
![Page 67: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/67.jpg)
Eliminación de 35
27
raíz
15
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
16
8 12
27 15 16 8 12 35 44 60
![Page 68: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/68.jpg)
Eliminación de 27
27
raíz
15
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento.
Algoritmo:
16
8 12
27 15 16 8 12 35 44 60
![Page 69: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/69.jpg)
Eliminación de 27
12
raíz
15
Paso 1:27 es remplazado por 12. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
16
8
12 15 16 8 27 35 44 60
![Page 70: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/70.jpg)
Eliminación de 27
12
raíz
15
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
16
8
12 15 16 8 27 35 44 60
![Page 71: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/71.jpg)
Eliminación de 27
16
raíz
12
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
15
8
16 12 15 8 27 35 44 60
![Page 72: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/72.jpg)
Eliminación de 16
16
raíz
12
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento.
Algoritmo:
15
8
16 12 15 8 27 35 44 60
![Page 73: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/73.jpg)
Eliminación de 16
8
raíz
12
Paso 1:16 es remplazado por 8. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
15
8 12 15 16 27 35 44 60
![Page 74: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/74.jpg)
Eliminación de 16
8
raíz
12
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
15
8 12 15 16 27 35 44 60
![Page 75: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/75.jpg)
Eliminación de 16
15
raíz
8
Paso 2:Se crea un montículo con los elementos restantes.
Algoritmo:
12
15 8 12 16 27 35 44 60
![Page 76: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/76.jpg)
Eliminación de 15
15
raíz
8
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento.
Algoritmo:
12
15 8 12 16 27 35 44 60
![Page 77: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/77.jpg)
Eliminación de 15
12
raíz
8
Paso 1:15 es remplazado por 12. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
12 8 15 16 27 35 44 60
![Page 78: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/78.jpg)
Eliminación de 15
12
raíz
8
Paso 2:Se crea un montículo con los elementos restantes..
Algoritmo:
12 8 15 16 27 35 44 60
![Page 79: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/79.jpg)
Eliminación de 12
12
raíz
8
Paso 1:La raíz se elimina, y es remplazada por el ultimo elemento.
Algoritmo:
12 8 15 16 27 35 44 60
![Page 80: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/80.jpg)
Eliminación de 12
8
raíz
Paso 1:12 es remplazado por 8. El elemento eliminado se coloca en la ultima posición.
Algoritmo:
8 12 15 16 27 35 44 60
![Page 81: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/81.jpg)
Eliminación de 8
8
raíz
Paso 1: Al quedar un solo elemento en el montículo, se finaliza el algoritmo.
Algoritmo:
8 12 15 16 27 35 44 60
![Page 82: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/82.jpg)
Al finalizar obtenemos el arreglo
8 12 15 16 27 35 44 60
Arreglo ordenado ascendentemente.
![Page 83: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/83.jpg)
Método Heapsort
1. Construir un montículo.
2. Eliminar la raíz del montículo en forma repetida.
![Page 84: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/84.jpg)
Eliminación de raíz - Métodos necesarios.
//Elimina la raíz del montículo a[], donde el tamaño es n.public static int[] eliminarRaiz(int a[], int n){
// n = tamaño del montículoint aux;aux = a[n-1];a[n-1] = a[0];a[0] = aux; return a;
}
Este método regresa un arreglo, donde la raíz se ha intercambiado por el ultimo elemento del arreglo
![Page 85: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/85.jpg)
Método heapsortpublic static int[] heapsort(int a[]){
int n = a.length; //Paso 1. Hacer montículo. int monticulo[] = hacerMonticulo(a, n); //Paso 2. Eliminar la raíz repetidas veces. for (int i = 0; i < monticulo.length; i++) { monticulo = eliminarRaiz(monticulo, n-i);
monticulo = hacerMonticulo(monticulo, n-i-1);}
return monticulo; }
![Page 86: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/86.jpg)
8 12 15 16 27 35 44 60
15 60 8 16 44 27 12 35
60 44 27 35 16 8 12 15
Arreglo inicial
Paso 1: Hacer Montículo
Paso 2: Repetir: Eliminar la raíz y hacer un moitculo.
Método heapsort
![Page 87: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/87.jpg)
• Gracias.
![Page 88: Método de Heapsort](https://reader035.vdocuments.pub/reader035/viewer/2022070512/589e8a871a28ab443e8b5e31/html5/thumbnails/88.jpg)
Fuentes:• Estructura de Datos . Tercera Edición – Osvaldo Cairó y Silvia Guardati.
McGrawHill Editorial.
• Estructuras de Datos en Java - Luis Joyanes Aguilar. McGrawHill Editorial.