Algoritmo de ordenamiento: Heap Sort

17,476 views 61 slides Nov 12, 2016
Slide 1
Slide 1 of 61
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61

About This Presentation

Algoritmo de ordenamiento: Heap Sort


Slide Content

HEAPSORT
Algoritmo de Ordenamiento
Integrantes:
Daniel Gomez Jaramillo.
Tania Landívar Ordoñez
JonnathanPeñaranda Sarmiento.
Gabriela Verdugo Velesaca.

CONTENIDO
1.Introducción
2.Descripcióndelmétodo
I.Ventajasydesventajas.
II.Funcionamiento
III.Complejidadcomputacional
IV.Aplicacionesyusosenlaactualidad
3.Conclusiones
4.Bibliografía.
5.Agradecimientos.

INTRODUCCIÓN
Ordenarunalistaeslaoperacióndearreglarloselementosdeacuerdoalgúncriterio(no
necesariamentematemático).Enelcasodetratarsedenúmeroselcriteriodeordenpodríaser
“<”,esdecir,ordenarloselementosdelalistademenoramayor.Aunquenaturalmenteunser
humanoescapazdeimplementarunametodologíapropiaparaordenarunconjuntode
elementos,estatareasevuelveextremadamentecomplicadacuandoelnúmerodeelementoses
grande,puestoquesenecesitaríamuchotiempoysepodríancometererrores.
Ejemplos de esta situación podrían
ser: ordenar alfabéticamente a los
habitantes de una ciudad, ordenar
una biblioteca, clasificar
alfabéticamente las palabras de un
lenguaje, ordenar una serie de
paginas de internet, ordenar un
conjunto de números enteros, etc.

DESCRIPCIÓN DEL MÉTODO HEAP SORT
ORIGEN
FuepublicadooriginalmenteporJ.W.J.Williamsllamándolo"Algorithm232"enlarevista
"CommunicationsoftheACM"en1964.
Estealgoritmoconsisteenordenarenunarbolyluegoextraerdelnodoquequedacomoraíz
ensucesivasiteracionesobteniendoelconjuntoordenado.Basasufuncionamientoenuna
propiedaddemontículos,porlacual,lacimasiempredependiendodecómose
definacontendráelmayoromenorelementodelmontículo.
DESCRIPCIÓN GENERAL

VENTAJAS Y DESVENTAJAS
VENTAJAS
•Funcionaefectivamentecondatos
desordenados.
•Sudesempeñoesenpromediotan
buenocomoelQuicksort.
•Noutilizamemoriaadicional.
DESVENTAJAS
•Noesestable,yaquesecomportade
maneraineficazcondatosdelmismo
valor
•Estemétodoesmuchomascomplejo
quelosdemás.

FUNCIONAMIENTO DEL MÉTODO HEAPSORT
Este algoritmo consiste en almacenar todos los elementos en un montículo y luego extraer el
nodo que queda como raíz en iteraciones sucesivas obteniendo el conjunto ordenado.
Para esto el método realiza los siguientes pasos:
•1.Se construye el Heap/montículo a partir del arreglo original.
•2.La raíz se coloca en el arreglo.
•3.El último elemento del montículo se vuelve la raíz.
•4.La nueva raíz se intercambia con el elemento de mayor valor por nivel.
•5.Tras el paso anterior la raíz vuelve a ser el mayor del montículo.
•6.Se repite el paso 2 hasta que quede el arreglo ordenado.

FUNCIONAMIENTO DEL MÉTODO HEAPSORT
<572732126, >,,,,,

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5
7
6
27
23 12
¿5<7?VERDADERO
árbol
ETAPA 1

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5
7
6
27
23 12
¿5<7?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5
6
27
23 12
¿5<3?FALSO
7
5

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5
6
27
23 12
¿5<2?FALSO
7
5
FALSO¿5<3?

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5
6
27
23 12
¿7<5?FALSO
7
5
¿5<2?FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5
6
27
23 12
¿7<27?
7
5
VERDADERO¿7<5?FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
6
27
23 12
¿7<27?
7
5
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623 12
5
27
7
¿7<6?FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623 12
5
27
7
¿7<6?FALSO ¿7<12?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623 12
5
27
7
¿7<12?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
5
27
7
12
¿27<12?FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
5
27
7
12
¿27<12?FALSO
27lista_ordenada

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
5 12
27
7
27lista_ordenada
FIN ETAPA 1

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
5 12
7
27lista_ordenada
FIN ETAPA 1ETAPA 2

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
5 12
7
27lista_ordenada
¿5<12?
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
5 12
7
27lista_ordenada
¿5<12?
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
12
27lista_ordenada
5
7
¿7<12?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
12
27lista_ordenada
5
7
¿7<12?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
27lista_ordenada
5 7
12
¿7<6?FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
27lista_ordenada
5
¿12<7?FALSO
¿7<6?FALSO
7
12

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
623
27lista_ordenada
5
¿12<7?FALSO
7
12
12

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
27lista_ordenada
5 7
12
6
2712

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
27lista_ordenada
5 7
6
2712

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
5 7
6
27lista_ordenada 2712
¿5<7?
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
5 7
6
27lista_ordenada 2712
¿5<7?
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
5
¿6<7?VERDADERO
7
6
27lista_ordenada 2712

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
5
¿6<7?VERDADERO
7
6
27lista_ordenada 2712

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
23
5 6
7
272712lista_ordenada 2727127

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
3
5 6
lista_ordenada 2727127
2
7

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
3
lista_ordenada 2727127
2
5 6
¿5<6?
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
3
5 6
lista_ordenada 2727127
2
¿5<6?
VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
6
lista_ordenada 2727127
2
3
5
¿2<6?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
6
lista_ordenada 2727127
2
¿2<6?VERDADERO
3
5

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
2727127
2
6
6lista_ordenada
3
5

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
lista_ordenada
5 2
3
6
27271276

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
lista_ordenada 27271276
5 2
3
¿5<2?
FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
5 2
3
lista_ordenada 27271276
¿3<5?VERDADERO
¿5<2?
FALSO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
2
lista_ordenada 27271276
3
5
¿3<5?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
lista_ordenada 27271276
3 2
5

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
3 5
2
lista_ordenada5

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
3
2
5lista_ordenada
¿2<3?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
3
2
5lista_ordenada
¿2<3?VERDADERO

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
2
3
5lista_ordenada

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
3
2
5lista_ordenada3

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
2
5lista_ordenada 3

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
27271276
2
53lista_ordenada
2

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
272712765lista_ordenada 32
árbol = NULL
2
FIN ETAPA 2

heap_sort(árbol, lista_ordenada)
{
while(árbol != NULL)
{
insertar_en_monticulo(árbol);
extraer_cima(árbol,lista_ordenada);
borrar_nodo(árbol,pos)
}
}
272712765lista_ordenada 32
árbol = NULL
FIN DEL ALGORITMO
FIN ETAPA 2

272712765lista_ordenada 32
RESULTADO:

COMPLEJIDAD DE HEAPSORT
ElalgoritmodeordenaciónpormontículosoHeapSortrecorreelconjuntodeelementos
desdelaposicióndelamitadhastalaprimeraorganizandoelmontículocorrespondientea
dichoelemento.Unavezterminadoesteproceso,seiniciaelprocesodeordenación
intercambiandoelprimerelementoporelúltimodelarregloyreorganizandoelmontículoa
partirdelaprimeraposición.
Lacomplejidaddelalgoritmodeordenaciónpor
montículosesO(nlogn)teniendoencuentaqueel
procesodeorganizarelmontículoenelpeorcaso
solamentetienequehacerintercambiossobreunasola
líneadeelementosdesdelaraízdelárbolhastaalguna
delashojasparaunmáximodenlog(n)intercambios.

APLICACIONES Y USOS EN LA ACTUALIDAD
UnadelasmasgrandesaplicacionesdeHeapSortesconstruircolasdeprioridadconlaideaque
busquelosprocesosquellevanlamayorcargadeprioridaddadounagrancantidaddeprocesos
porhacer.
OtraaplicaciónesladeProgramacióndeIntervalos,endondesetieneunalistadetareasconun
tiempodeinicioyfinydeseamoshacertantastareascomoseanposiblesenunperiododetiempo
limitado.
Enesenciaunaaplicaciónoalgoritmoquetratedeordenarunalistadeelementosdependerán
eficientementeenunalgoritmodeordenamiento,yelmétodoHeapSortpuedeproveernosdetal
función.

CONCLUSIONES
Laprincipalventajadeestemétododeordenamientoessueficienciaeneltiempodeejecución,
elcualesO(nlogn).Laeficienciadelamemoria,paralaimplementacióndelalgoritmoesO(1),
tantoenlaformaiterativacomorecursiva.
Concluyendo,decimosqueestemétodoesconveniente
usarlocuandosetratadeordenararreglosolistasgrandes,
yaquecuandoporejemplo,esteseencuentracon
elementosrepetidos,elalgoritmosueletener
inconvenientesadiferenciadeotrosmétodoscomoelQuick
SortyelMergeSort.

REFERENCIAS BIBLIOGRÁFICAS
•Dr.GuillermoCámaraChávez.(2015).Ordenación.06/06/2016,dehomepages.Sitioweb:
http://homepages.dcc.ufmg.br/~gcamarac/cursos/algoritmia/ordenacion_4pages_sec.pdf
•ConradoMartínez.(2012).Algorítmica:Heapsyheapsort.06/06/2016,dealgorithmicsSitio
web:http://algorithmics.lsi.upc.edu/docs/pqueues.pdf
•Springer-Verlag(1991).“AlgorithmsandDataStrctures”.Ottawa,Canada.06/06/2016,
Disponibleen:https://books.google.com.ec/books?id=NRrcsIJZAYMC

¡¡ GRACIAS !!
Estructura de Datos y Análisis de Algoritmos.
Tags