Anda di halaman 1dari 16

Mtodo de ordenao Heapsort

Ordenao por Seleo


Caracteriza-se por identificar, a cada iterao, a chave de menor (maior) valor na poro do vetor ainda no ordenada e coloc-la em sua posio definitiva.

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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.

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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).

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Exemplo de um Heap Mximo

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Como representar Heaps ?


Podemos representar heaps como rvores binrias ou vetores.

A idia linearizar a rvore por nveis.

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Procedimentos sobre Heaps


Heapify

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 de ordenao. Complexidade(nlog2n).

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Procedimento Build-Heap
Utiliza o procedimento Heapify de forma bottom-up para transformar um vetor A[1..n] em um heap com n elementos.

A[([n/2]+1)] a A[n] correspondem s folhas da rvore e portanto so heaps de um elemento.

Basta chamar Heapify para os demais elementos do vetor A, ou seja, de A[(n/2)] a 1.

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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

Material produzido pelo professor Alexandre Parra Carneiro da Silva

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.

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Exemplo de HeapSort (1/2)


Resultado do Build-Heap sobre o vetor
:
16 4 10 14 7 9 3 2 8 1

16 14

10

7
1

16
2 3

14
4 5 6

10
7

8
8 9

7
10

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Exemplo de HeapSort (2/2)


Aplicando o procedimento HeapSort resultado do Build-Heap anterior, temos:
16 14 10
1

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

1 2 8 9 10 14 Material produzido3 professor7 pelo 4 Alexandre Parra Carneiro da Silva

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

Material produzido pelo professor Alexandre Parra Carneiro da Silva

Anda mungkin juga menyukai