48
Prof. Flávio R. Uber - UEM/DIN HEAPSORT Universidade Estadual de Maringá Centro de Tecnologia Departamento de Informática Prof. Flávio Rogério Uber

HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

HEAPSORT

Universidade Estadual de MaringáCentro de Tecnologia Departamento de InformáticaProf. Flávio Rogério Uber

Page 2: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

Heapsort

• Proposto por Floyd e Williams em 1964;

• O desempenho, no pior caso, é semelhante ao caso médio;

• É considerado uma variação do método de ordenação por seleção;

Page 3: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

HeapSort

• Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:– Os filhos de um nó i estão armazenados nas

posições 2i e 2i + 1 do vetor– Todo nó tem valor maior ou igual ao de seus

filhos– A diferença máxima de altura entre os nós

folha é de um nível

• A raiz do heap é maior chave

Page 4: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

Heapsort

5

7 8

2 9 6 4

5 7 8 2 9 6 4A =

É preciso que a estrutura seja transformada em um heap, já que a restriçãocom relação aos valores das chaves não é atendida.

Page 5: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

Heapsort

• A transformação começa a partir do nó que ocupa a posição n div 2 do vetor.

5

7 8

2 9 6 4

5 7 8 2 9 6 4A =

--- OK!

Page 6: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

Heapsort

• Os próximos nós são obtidos decrementando-se os índices no vetor até este atingir o valor 1

5

7 8

2 9 6 4

5 7 8 2 9 6 4A =

Condição Violada!

Page 7: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 5

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• Com a condição violada, troca-se o nó de valor 7 com o nó de maior valor entre seus filhos

A =

Page 8: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

5 9 8 2 7 6 4

Heapsort

• No próximo passo, o índice 1 foi atingido

5

9 8

2 7 6 4

A =

Condição Violada!

Page 9: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

5 9 8 2 7 6 4

Heapsort

• Com a condição violada, troca-se o nó de valor 7 com o nó de maior valor entre seus filhos

A =

9

9 8

2 7 6 4

5

59

Page 10: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• No entanto, esta última troca, causou problema para o restante do heap.

A =

5

59

Condição Violada!

Page 11: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• Deve-se então percorrer o heap na ordem inversa, de 1 até n div 2

A =

5

59

Page 12: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• É feita a troca dos elementos para corrigir a violação

A =

5

59 7

7

Page 13: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• Prossegue-se até atingir o índice n div 2

A =

5

59 7

7 --- OK!

Page 14: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• Formado o heap, sua raiz corresponde à maior chave e portanto está posicionada na primeira posição do vetor

A =

5

59 7

7

Page 15: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• Com isto, troca-se este valor da primeira posição com a última do vetor

A =

5

5 97

7

4

4

9

Page 16: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN 9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort

• O processo é repetido, excluindo-se do heap o elemento já ordenado

A =

5

5 97

7

4

4

Page 17: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 97

7

4

4Condição Violada!

Page 18: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 97

7

8

8

4

4

Page 19: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 97

7

8

8

4

4

Condição Violada!

Page 20: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 97

7

8

8

6

6

4

4

Page 21: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Restabelecido o heap, novamente na primeira posição

temos o maior elemento, que deve ser trocado com o elemento da última posição

A =

5

5 97

7

8

8

6

6

4

4

Page 22: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Restabelecido o heap, novamente na primeira posição

temos o maior elemento, que deve ser trocado com o elemento da última posição

A =

5

5 97

7

4

4

6

6

8

8

Page 23: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 97

7

4

4

6

6

8

8

Condição Violada!

Page 24: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 94

4

7

7

6

6

8

8

Page 25: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

5

5 94

4

7

7

6

6

8

8

Condição Violada!

Page 26: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

4

4 95

5

7

7

6

6

8

8

Page 27: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Ao final de mais uma etapa, novamente o elemento da

primeira posição é o maior, e deve ser trocado com o último.

A =

4

4 95

5

7

7

6

6

8

8

Page 28: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Ao final de mais uma etapa, novamente o elemento da

primeira posição é o maior, e deve ser trocado com o último.

A =

7

7 95

5

4

4

6

6

8

8

Page 29: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• O heap agora tem apenas 4 elementos.

A =

7

7 95

5

4

4

6

6

8

8

Page 30: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

7

7 95

5

4

4

6

6

8

8

Page 31: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

7

7 95

5

4

4

6

6

8

8

Condição Violada!

Page 32: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

7

7 95

5

6

6

4

4

8

8

Page 33: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Mais uma etapa finalizada, e novamente o primeiro

elemento é trocado de posição com o último.

A =

7

7 95

5

2

2

4

4

8

86

6

Page 34: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• O heap agora possui três elementos.

A =

7

7 95

5

2

2

4

4

8

86

6

Page 35: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

7

7 95

5

2

2

4

4

8

86

6

Condição Violada!

Page 36: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

7

7 92

2

5

5

4

4

8

86

6

Page 37: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Novamente, na primeira posição está o maior elemento,

que deve ser trocado de posição com o último

A =

7

7 92

2

5

5

4

4

8

86

6

Page 38: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Novamente, na primeira posição está o maior elemento,

que deve ser trocado de posição com o último

A =

7

7 92

2

4

4

5

5

8

86

6

Page 39: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• O heap agora tem apenas dois elementos

A =

7

7 92

2

4

4

5

8

86

6

Page 40: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Para restabelecer o heap, percorre-se as chaves no vetor

a partir da posição 1 até a posição n div 2, mas considerando apenas os elementos eventualmente trocados

A =

7

7 92

2

4

4

5

8

86

6

--- OK!

Page 41: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Novamente, na primeira posição está o maior elemento,

que deve ser trocado de posição com o último

A =

7

7 92

2

4

4

5

8

86

6

Page 42: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Novamente, na primeira posição está o maior elemento,

que deve ser trocado de posição com o último

A =

7

7 94

4

2

2

5

8

86

6

Page 43: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

9

9 8

2 7 6 4

5 9 8 2 7 6 4

Heapsort• Novamente, na primeira posição está o maior elemento,

que deve ser trocado de posição com o último

A =

7

7 94

4

2

2

5

8

86

6

Page 44: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

5 9 8 2 7 6 4

Heapsort

Sequência Ordenada!

A =

7

7 94

4

2 5

8

86

6

Page 45: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

INvoid Constroi (int *A, int n){

int esq; esq = n / 2 + 1; while (esq > 1)

{esq --;Refaz (esq, n, A);

}}____________________________________________void Refaz (int esq, int dir, int *A){

int i = esq;int j;int x;j = i * 2;x = A[i];

while (j<= dir){

if (j < dir) if (A[j] < A [j+1])

j ++; if (x >= A[j]) break; A[i] := A[j]; i := j; j := 2 * i;

}A[i] := x;

}

5

7 8

2 9 6 4

5 7 8 2 9 6 4A =

Page 46: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

Heapsort

• Uma vez que além da seleção do maior termo, a cada etapa é preciso a reconstrução do heap, a utilização do heapsort não é recomendada para uma quantidade pequena de termos.

• Seu comportamento é O(nlogn) qualquer que seja a entrada, o que o torna apropriado quando não se pode tolerar um desempenho desfavorável

Page 47: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

Heapsort

• Exercício:– Ordene a sequência 19 5 30 11 9 12 20

usando heapsort e mostre o comportamento passo a passo da execução do método.

Page 48: HEAPSORT - UEMfuber/estr_dados/heapsort.pdf · P r o f. F l á v i o R. U b e r-U E M / D I N HeapSort • Heap: árvore binária, organizada em um vetor, obedecendo a seguinte regra:

P

rof.

Flá

vio

R.

Ube

r -

UE

M/D

IN

BibliografiaZIVIANI, Nivio. Projeto de Algoritmos com implementações em Pascal e C. São Paulo: Pioneira Thomson Learning. 2a. Edição 2004.WIRTH, Niklaus. Algoritmos e Estruturas de Dados. LTC. 1999.Azeredo, P. A. Métodos de Classificação de Dados e Análise de suas Complexidades. Riode Janeiro: Editora Campus, 1996;Moraes, Celso Roberto. Estruturas de Dados e Algoritmos. São Paulo: Berkeley Brasil, 2001;