Escolar Documentos
Profissional Documentos
Cultura Documentos
Funes
Algoritmo HeapSort
Estudo de Caso
do
HeapSort
Algoritmo de ordenao sofisticado Desenvolvido em 1964 por Robert W. Floyd (New York, USA) e J.W.J. Williams O(nlgn) no pior caso In-place: a ordenao que efetuada com a prpria sequncia sem utilizar sequncias adicionais. Tcnica de Projeto de Algoritmos: Utilizao de uma estrutura de dados (heap) para gerenciar informaes durante a execuo do algoritmo
Constroi_Heap (Build-heap ou BUILD-MAX-HEAP) produz um heap a partir de um array de entrada no ordenado. Heapify (ou MAX-HEAPIFY) chave para manter a propriedade do heap mximo. Heapsort ordena o array localmente.
Um Heap pode ser representado por um array unidimensional de modo que A raiz ocupa a posio 1. Os demais elementos obedecem:
Exemplo:
16 1 14 2 10 3 7 5 4 9 1 9 6 3 7
esq.i = 2i dir.i = 2i + 1
8 2
8 4
10
16 14
1 2
10
3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
Heap Mximo
A[i]>=A[2i] A[i]>=A[2i+1]
Construo Bottom-up Das folhas para a raiz Da direita para a esquerda no array Top-down Da raiz para as folhas Da esquerda para a direita no array
Construo bottom-up de um heap mximo Caso base: n=1 (no h o que fazer)
14
14
14
14
Algoritmo Heapify(A, n, i )
Enquanto 2i n faa /* i tem filhos*/ { Se 2i < n ento /* i tem dois filhos*/ Se A[2i ] > A[2i +1] ento maior 2i seno maior 2i +1 seno maior 2i /* o nico o maior*/ Se A[i ] < A[maior] ento {A[i ] A[maior]; i maior } seno i n /* deixe o lao*/ }
Aps construir o heap, o array visto como contendo: um heap + parte da soluo
Algoritmo Heapsort (A, n) Constri-Heap(A, n) Para j n at 2 faa { exchange (A[1], A[ j]); Heapify (A, j-1, 1) }
Passo-a-Passo: 1. Constri-Heap: i = n/2 e vai at 1 2. Heapify (pai maior que ambos os filhos)
10 70 15 5 20 30 25
10 70 5 20 30 15 25
10 70 5 20 15 30 25
Passo-a-Passo: 1. Constri-Heap: i = n/2 e vai at 1 2. Heapify (pai maior que ambos os filhos) i=2 Heapify: maior = 2.i+1 (no faz nada, pois o pai maior que ambos os filhos)
10
70
5 20 15
30 25
Passo-a-Passo: 1. Constri-Heap: i = n/2 e vai at 1 2. Heapify (pai maior que ambos os filhos)
10 70 5 20 15 30 25
70 10 5 20 30
15
25
Passo-a-Passo: Constri-Heap: i = n/2 e vai at 1 Heapify (pai maior que ambos os filhos)
70 10 5 20 15 30 25
70 20 5 10 15 30 25
25 70
20
5 10 15
30
25 25
20 10 15
30 70 25
25 20 5 10 15 30
15 30
20
5 10 15 30
25
20 5 25 10
15
30
70
15
25
30
70
5 15
10
5 15
20
25
30
70
5 10 10 5
15
20
25
30
70
Elementos Ordenados
10
15
20
25
30
70
http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sorting II/heapSort/heapSort.html
http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sorting /heapSort/heapSort.html
Captulo 04 (Ziviani)
Captulo 06 (Cormen)