HeapSort
Utiliza uma estrutura de dados (heap) para organizar a informao durante a execuo do algoritmo. Um heap uma estrutura de dados baseada em rvore binria que segue um critrio (ou condio) bem-definido(a). Estruturalmente, deve ser uma rvore quase completa: o ltimo nvel pode no conter os ns mais direita.
Condio de Heap
Os dados armazenados em um heap devem satisfazer a seguinte condio:
Todo n deve ter valor maior ou igual com relao aos seus filhos (Heap Mximo).
A condio no determina nenhuma relao entre os filhos de um n (no confundir com rvore binria de pesquisa).
Relacionando os ns do Heap
A representao em vetores permite relacionar os ns do heap da seguinte forma:
raiz da rvore: primeira posio do vetor filhos de um n na posio i: posies 2i e 2i+1 pai de um n na posio i: posio [i / 2]
1 2 3
4 8 9 10
Garante a manuteno da propriedade do Heap. Complexidade O(log2n). Build-Heap Produz um heap a partir de um vetor no ordenado. Complexidade O(n).
Heapsort
Procedimento Heapfy
Reorganiza heaps (Objetivo: manter a condio). Assume que as rvores binrias correspondentes a Esq(i) e Dir(i) so heaps, mas A[i] pode ser menor que seus filhos. Exemplo:
16
1
10
14
3
1
16
2 3 2
16
3
i
4
4
5 6
10
7 4
14
5 6
10
7
14
8 9
7
10
i
8
4
9
7
10
8 1
8 1
Procedimento Build-Heap
Utiliza o procedimento Heapify de forma bottom-up para transformar um vetor A[1..n] em um heap com n elementos.
Exemplo de Build-Heap
Vetor:
16
1
10
14
1
1
1
16
2 3 2
16
3 2
16
3
i
4
4
5 6
10
7
14 3
4 5 6
10
7 4
14
5 6
10
7
14
8 9
7
10
i
8
4
9
7
10
3
8
8
9
7
10
8 1
8 1
Exerccio em Sala
1. Utilize o procedimento Build-Heap para construir um heap a partir do vetor.
4 1 3 2 16 9 10 14 8 71
Procedimento HeapSort
1) Constri um heap a partir de um vetor de entrada (Build-Heap). 2) Como o maior elemento est localizado na raiz (A[1]), este pode ser colocado em sua posio final, trocando-o pelo elemento A[n]. 3) Reduz o tamanho do heap de uma unidade, chama Heapify(A,1) e aps trmino de Heapfy(A,1), repete-se o passo anterior (2), at que o heap tenha tamanho = 2.
16 14
10
7
1
16
2 3
14
4 5 6
10
7
8
8 9
7
10
sobre
1
1
vetor
16
2 3 2
1
3
14
4 5 6
10
7 4
2
5 6
3
7
8
8 9 10
7 4 1
3
8
4
9 10
10
14 16
16
Exerccio em Sala
Utilize o procedimento HeapSort sobre o resultado do Build-Heap do vetor
4 1 3 2 16 9 10 14 8 71