SlideShare una empresa de Scribd logo
República Bolivariana de Venezuela
Ministerio del Poder Popular para la Defensa
UNEFA – Núcleo Mérida
Integrantes:
Ana Karina Carrillo Camacho
Anthony Manuel Duque Pérez
Katherine Dayan Asuaje Pirela
Miguel Eduardo Villamizar Rosario
¿Qué es heap sort?
Es un algoritmo de ordenación basado en comparaciones de elementos que utiliza un
heap para ordenarlos.
También se puede decir que es un algoritmo de ordenación por selección basado en la
construcción de un árbol parcialmente ordenado.
El algoritmo Heap Sort utiliza una estructura llamada "montículo" que no es otra cosa
más que un árbol binario donde cada nodo padre siempre tiene un valor mayor que el
de todos sus nodos hijos. Además de ello un montículo debe ser un árbol binario
completo.
El algoritmo consiste en insertar todos los elementos del vector en un montículo y
aprovechar que de esta forma siempre tendremos el mayor elemento en la raíz. Luego
para obtener los elementos ordenados de mayor a menor, solo debemos tomar el valor
de la raíz, eliminar la raíz y reordenar el montículo cada vez hasta agotar sus nodos.
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Método Heap Sort
Ventajas
• La principal ventaja es que este método funciona más efectivamente con datos
desordenados.
• Su desempeño es en promedio tan bueno como el quicksoft y se comporta mejor que
este último en los peores de los casos.
• No utiliza memoria adicional.
Desventajas
• No es estable, debido a que se comporta de manera ineficaz con datos del mismo
valor.
• Método más complejo
Codigo de heap sort:
#include <stdio.h>
/*
Inserta un elemento en el monticulo.
v Vector de elementos (monticulo)
n Numero de elementos en el vector
x Nuevo elemento
*/
void heap_insert(int *v, int n, int x) {
// insertamos x después del último elemento
v[n] = x;
// Mientras x sea mayor que su padre...
while(v[(n-1)/2] < v[n]) {
// Intercambiamos x con su padre
int aux = v[(n-1)/2];
v[(n-1)/2] = v[n];
v[n] = aux;
// Actualizamos la posición de x
n = (n-1)/2;
// y volvemos a evaluar con su nuevo padre
}
}
/*
Elimina la raiz del monticulo y devuelve su valor
v Vector de elementos (monticulo)
n Numero de elementos en el vector
int heap_remove(int *v, int n) {
// obtenemos el valor de la raiz
int x = v[0];
// movemos a la raiz el ultimo elemento del monticulo
// y reducimos el numero de elementos en 1 (--n)
v[0] = v[--n];
// indice para al elemento movido
int i=0;
// indice para el primer hijo del elemento movido
int h=1;
// mientras aun haya hijos
while(h < n) {
// validamos si hay un segundo hijo
// y si el valor del segundo hijo es mayor que el del primero
if(h+1<n && v[h+1]>v[h]) {
// en ese caso el hijo a tener en cuenta sera el segundo
h++;
}
// nos quedamos con el indice del hijo de mayor valor en "h"
// si el valor del hijo "h" es mayor que el padre "i"
if(v[i] < v[h]) {
// intercambiamos sus valores
int aux = v[i];
v[i] = v[h];
v[h] = aux;
// actualizamos el indice del elemento movido
i = h;
// hallamos el indice de su nuevo primer hijo
h = 2*i+1;
}
else {
// terminamos el bucle
h = n;
}
}
// devolvemos el valor de la raiz
return x;
}
/*
Ordena un vector usando un monticulo.
v Vector a ordenar
n Numero de elementos del vector
*/
void heap_sort(int *v, int n) {
// declara un monticulo del tamaño del vector
int *w = new int[n];
// inserta en el monticulo todos los elementos del vector
for(int i=0; i<n; i++) {
heap_insert(w,i,v[i]);
}
// retira cada vez la raiz del monticulo e inserta su valor
// en el vector desde la ultima posicion hacia la primera
for(int i=n; i>0; i--) {
v[i-1] = heap_remove(w,i);
}
}
/*
Programa principal
(Ejemplo de HeapSort)
int main() {
int *v, n;
// pide el numero de elementos del vector
printf("n = ");
scanf("%d",&n);
// crea el vector de forma dinamica
v = new int[n];
// pide los elementos del vector
for(int i=0; i<n; i++) {
printf("v[%d] = ",i);
scanf("%d",&v[i]);
}
printf("Heap Sort...n");
// ordena el vector usando HeapSort
heap_sort(v,n);
// muestra el vector ordenado
for(int i=0; i<n; i++) {
printf("v[%d] = %dn",i,v[i]);
}
// fin del programa
return 0;
}
Método Heap Sort

Más contenido relacionado

PDF
listado de numeros
PPT
PPT
PPTX
Arreglos
DOCX
Practica 9
PPTX
Bucles y switch
PDF
propiedades de la integral indefinida
listado de numeros
Arreglos
Practica 9
Bucles y switch
propiedades de la integral indefinida

La actualidad más candente (16)

PPTX
Lab Sistemas Distribuidos y Paralelos Actividad 4
TXT
Maiba2
PPTX
Objetos con atributos de vectores
PPTX
Tarea sesion3
DOCX
Practica9
DOCX
Operaciones aritméticas Básicas en Matlab
PPTX
Recorrer objetos - Java
PDF
Operacion con funciones
PPTX
Tarea sesion 3
DOCX
Ordenamiento por arbol binario
DOCX
Programas mm 314
PPTX
Tarea sesion 3
PDF
Vectores
DOCX
Practica 9
DOCX
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
PPTX
Programacion de codigos_php
Lab Sistemas Distribuidos y Paralelos Actividad 4
Maiba2
Objetos con atributos de vectores
Tarea sesion3
Practica9
Operaciones aritméticas Básicas en Matlab
Recorrer objetos - Java
Operacion con funciones
Tarea sesion 3
Ordenamiento por arbol binario
Programas mm 314
Tarea sesion 3
Vectores
Practica 9
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
Programacion de codigos_php
Publicidad

Similar a Método Heap Sort (20)

PDF
Algoritmo de ordenamiento: Heap Sort
DOCX
Metodo de Ordenamiento Heap Sort (Monticulo)
PPTX
HeapSort
DOCX
Investigacion Formativa Heap Short (Monticulo).docx
PPTX
algoritmo de ordenamiento.pptx
PPTX
Heap sort
PPTX
Algoritmo de almacenamiento - Método Heap Sort
PPT
13 heaps
PDF
Pqueues
PDF
Pqueues
PPT
Metodo_ordenamiento_Monticulo
PPTX
Presentacion Algoritmo heapsort
PPTX
Algoritmo Heap Sort
PPTX
Algoritmo por seleccion
PPTX
Heap sort (Monticulos)
PPTX
Ordenamiento en C++
PPT
heapsort.ppt
Algoritmo de ordenamiento: Heap Sort
Metodo de Ordenamiento Heap Sort (Monticulo)
HeapSort
Investigacion Formativa Heap Short (Monticulo).docx
algoritmo de ordenamiento.pptx
Heap sort
Algoritmo de almacenamiento - Método Heap Sort
13 heaps
Pqueues
Pqueues
Metodo_ordenamiento_Monticulo
Presentacion Algoritmo heapsort
Algoritmo Heap Sort
Algoritmo por seleccion
Heap sort (Monticulos)
Ordenamiento en C++
heapsort.ppt
Publicidad

Último (20)

PDF
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
PPTX
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
PDF
Informe Estudio Final Apagon del 25 de febrero
PPTX
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
PPTX
DEBL Presentación PG 23.pptx [Autoguardado].pptx
PDF
Módulo-de Alcance-proyectos - Definición.pdf
PDF
LIBRO UNIVERSITARIO SOFTWARE PARA INGENIERIA BN.pdf
PDF
LIBRO UNIVERSITARIO DESARROLLO ORGANIZACIONAL BN.pdf
PPT
357161027-seguridad-industrial-diapositivas-ppt.ppt
PPTX
OPERACION DE MONTACARGAS maneji seguro de
PDF
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
PPT
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
PDF
Oficio SEC 293416 Comision Investigadora
PDF
Prevención de estrés laboral y Calidad de sueño - LA PROTECTORA.pdf
PDF
prg2_t01_p01_Fundamentos POO - parte1.pdf
DOCX
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
PPTX
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
PPTX
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
Informe Estudio Final Apagon del 25 de febrero
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
DEBL Presentación PG 23.pptx [Autoguardado].pptx
Módulo-de Alcance-proyectos - Definición.pdf
LIBRO UNIVERSITARIO SOFTWARE PARA INGENIERIA BN.pdf
LIBRO UNIVERSITARIO DESARROLLO ORGANIZACIONAL BN.pdf
357161027-seguridad-industrial-diapositivas-ppt.ppt
OPERACION DE MONTACARGAS maneji seguro de
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
Oficio SEC 293416 Comision Investigadora
Prevención de estrés laboral y Calidad de sueño - LA PROTECTORA.pdf
prg2_t01_p01_Fundamentos POO - parte1.pdf
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx

Método Heap Sort

  • 1. República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa UNEFA – Núcleo Mérida Integrantes: Ana Karina Carrillo Camacho Anthony Manuel Duque Pérez Katherine Dayan Asuaje Pirela Miguel Eduardo Villamizar Rosario
  • 2. ¿Qué es heap sort? Es un algoritmo de ordenación basado en comparaciones de elementos que utiliza un heap para ordenarlos. También se puede decir que es un algoritmo de ordenación por selección basado en la construcción de un árbol parcialmente ordenado. El algoritmo Heap Sort utiliza una estructura llamada "montículo" que no es otra cosa más que un árbol binario donde cada nodo padre siempre tiene un valor mayor que el de todos sus nodos hijos. Además de ello un montículo debe ser un árbol binario completo. El algoritmo consiste en insertar todos los elementos del vector en un montículo y aprovechar que de esta forma siempre tendremos el mayor elemento en la raíz. Luego para obtener los elementos ordenados de mayor a menor, solo debemos tomar el valor de la raíz, eliminar la raíz y reordenar el montículo cada vez hasta agotar sus nodos.
  • 14. Ventajas • La principal ventaja es que este método funciona más efectivamente con datos desordenados. • Su desempeño es en promedio tan bueno como el quicksoft y se comporta mejor que este último en los peores de los casos. • No utiliza memoria adicional. Desventajas • No es estable, debido a que se comporta de manera ineficaz con datos del mismo valor. • Método más complejo
  • 15. Codigo de heap sort: #include <stdio.h> /* Inserta un elemento en el monticulo. v Vector de elementos (monticulo) n Numero de elementos en el vector x Nuevo elemento */ void heap_insert(int *v, int n, int x) { // insertamos x después del último elemento v[n] = x; // Mientras x sea mayor que su padre... while(v[(n-1)/2] < v[n]) { // Intercambiamos x con su padre int aux = v[(n-1)/2]; v[(n-1)/2] = v[n]; v[n] = aux; // Actualizamos la posición de x n = (n-1)/2; // y volvemos a evaluar con su nuevo padre } } /* Elimina la raiz del monticulo y devuelve su valor v Vector de elementos (monticulo) n Numero de elementos en el vector
  • 16. int heap_remove(int *v, int n) { // obtenemos el valor de la raiz int x = v[0]; // movemos a la raiz el ultimo elemento del monticulo // y reducimos el numero de elementos en 1 (--n) v[0] = v[--n]; // indice para al elemento movido int i=0; // indice para el primer hijo del elemento movido int h=1; // mientras aun haya hijos while(h < n) { // validamos si hay un segundo hijo // y si el valor del segundo hijo es mayor que el del primero if(h+1<n && v[h+1]>v[h]) { // en ese caso el hijo a tener en cuenta sera el segundo h++; } // nos quedamos con el indice del hijo de mayor valor en "h" // si el valor del hijo "h" es mayor que el padre "i" if(v[i] < v[h]) { // intercambiamos sus valores int aux = v[i]; v[i] = v[h]; v[h] = aux; // actualizamos el indice del elemento movido i = h; // hallamos el indice de su nuevo primer hijo h = 2*i+1; }
  • 17. else { // terminamos el bucle h = n; } } // devolvemos el valor de la raiz return x; } /* Ordena un vector usando un monticulo. v Vector a ordenar n Numero de elementos del vector */ void heap_sort(int *v, int n) { // declara un monticulo del tamaño del vector int *w = new int[n]; // inserta en el monticulo todos los elementos del vector for(int i=0; i<n; i++) { heap_insert(w,i,v[i]); } // retira cada vez la raiz del monticulo e inserta su valor // en el vector desde la ultima posicion hacia la primera for(int i=n; i>0; i--) { v[i-1] = heap_remove(w,i); } } /* Programa principal (Ejemplo de HeapSort)
  • 18. int main() { int *v, n; // pide el numero de elementos del vector printf("n = "); scanf("%d",&n); // crea el vector de forma dinamica v = new int[n]; // pide los elementos del vector for(int i=0; i<n; i++) { printf("v[%d] = ",i); scanf("%d",&v[i]); } printf("Heap Sort...n"); // ordena el vector usando HeapSort heap_sort(v,n); // muestra el vector ordenado for(int i=0; i<n; i++) { printf("v[%d] = %dn",i,v[i]); } // fin del programa return 0; }