Escolar Documentos
Profissional Documentos
Cultura Documentos
Agenda
• Definição de Heap
• Funcionamento básico
• Algoritmo em C#
Introdução
• O Heapsort é um algoritmo de seleção que encontra o maior elemento
em uma lista, troca-o com o último e repete o processo
Árvore
• Estrutura de dados cujas operações de inserção, remoção e substituição
possuem a mesma eficiência
Árvore
• Estrutura de dados cujas operações de inserção, remoção e substituição
possuem a mesma eficiência
O nó 5 é denominado nó raiz e
ele está no nível 0
Árvore
• Estrutura de dados cujas operações de inserção, remoção e substituição
possuem a mesma eficiência
Árvore
• Estrutura de dados cujas operações de inserção, remoção e substituição
possuem a mesma eficiência
Árvore
• Estrutura de dados cujas operações de inserção, remoção e substituição
possuem a mesma eficiência
Heap
• Árvore binária em que cada nó é menor ou igual que seus filhos, fazendo
com que a raiz tenha o menor valor
2 3
4 5 6 7
1
8 9 5
0
---------------------------- Algoritmos e Estruturas de Dados (9)
Heapsort
Heap Invertido
• Árvore binária em que cada nó é maior ou igual que seus filhos, fazendo
com que a raiz tenha o maior valor
Consideração
• A partir deste ponto, neste material, a palavra heap será usada para
designar o heap invertido
E agora José?
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (18)
Heapsort
16
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (19)
Heapsort
16 14 10
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (20)
Heapsort
16 14 10
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (21)
Heapsort
16 14 10 13 11
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (22)
Heapsort
16 14 10 13 11 8 9
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (23)
Heapsort
16 14 10 13 11 8 9 7 1
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (24)
Heapsort
16 14 10 13 11 8 9 7 1 5
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (25)
Heapsort
• array[ 1 ] é a raiz
16 14 10 13 11 8 9 7 1 5
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (27)
Heapsort
16 14 10 13 11 8 9 7 1 5
1 2 3 4 5 6 7 8 9 10
---------------------------- Algoritmos e Estruturas de Dados (28)
Heapsort
9 8 3 7 6 1 2 5 4 0 31
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (29)
Heapsort
31
9 8 3 7 6 1 2 5 4 0 31
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (30)
Heapsort
9 8 3 7 6 1 2 5 4 0 31
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (31)
Heapsort
9 8 3 7 6 1 2 5 4 0 31
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (32)
Heapsort
9 8 3 7 31 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (33)
Heapsort
9 8 3 7 31 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (34)
Heapsort
9 8 3 7 31 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (35)
Heapsort
9 31 3 7 8 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (36)
Heapsort
9 31 3 7 8 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (37)
Heapsort
9 31 3 7 8 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (38)
Heapsort
31 9 3 7 8 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (39)
Heapsort
31 9 3 7 8 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (40)
Heapsort
31 9 3 7 8 1 2 5 4 0 6
1 2 3 4 5 6 7 8 9 10 11
---------------------------- Algoritmos e Estruturas de Dados (41)
Heapsort
Exercício (1)
• Faça um método que receba dois heaps e retorne um terceiro heap
unificando as duas estruturas recebidas
Agenda
• Definição de Heap
• Funcionamento básico
• Algoritmo em C#
Funcionamento Básico
• Construa o heap inserindo sistematicamente cada um dos elementos do
array
Princípio de Inserção
• Crie uma nova folha (contendo o novo elemento) no último nível do heap.
Se esse estiver completo, recomece um novo nível
• Se o novo elemento for maior que seu pai, troque-os e realize o mesmo
processo para o pai, avô, bisavô e, assim, sucessivamente, até que todos
os pais sejam maiores que seus filhos
Exercício (2)
• Insira os números 11 e 9 na heap abaixo, respectivamente
Princípio de Remoção
• Armazene o elemento da raiz em uma variável temporária
• Repita o passo anterior para o filho com elemento trocado até que todos os
pais sejam maiores que seus filhos
Exercício (3)
• Remova a raiz no heap abaixo. Em seguida, remova novamente a raiz
Agenda
• Definição de Heap
• Funcionamento básico
• Algoritmo em C#
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
}
}
...
void reconstruir(int tam){
}
...
---------------------------- Algoritmos e Estruturas de Dados (62)
Heapsort
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
}
...
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
}
...
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
101
}
...
115
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
true: 2 <= 6
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
101
}
...
115
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
101
}
...
115
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
101
}
...
115
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
i
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
101
}
...
115
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
} true: 2 > 1 && 115 > 101
i
101 115 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
} false: 1 > 1 && ...
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
true: 3 <= 6
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
} false: 3 > 1 && 30 > 115
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2);
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
true: 4 <= 6
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63
}
} false: 4 > 1 && 63 > 101
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
true: 5 <= 6
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47
}
} false: 5 > 1 && 47 > 101
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
true: 6 <= 6
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
} false: 6 > 1 && 20 > 30
i
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
false: 7 <= 6
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
void construir(int tam){
for (int i = tam; i > 1 && array[i] > array[i/2]; i /= 2){
swap(i, i/2); 63 47 20
}
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
...
101 30
63 47 20
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
115
}
115 101 30 63 47 20
1 2 3 4 5 6
Algoritmo em C#
int tam = n;
...
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
115
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 115 101 30 63 47 20
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 6
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
115
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 115 101 30 63 47 20
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 6
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
115
} true: 6 > 1
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 115 101 30 63 47 20
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 20 101 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 20 101 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
... filho
tam
int tam = n; 5 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
20
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 20 101 30 63 47 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (109)
Heapsort
Algoritmo em C#
... filho
tam
int tam = n; 5 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
20
}
}
101 30
void reconstruir(int tam){
int i = 1; true: 1 <= 2
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 20 101 30 63 47 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (110)
Heapsort
Algoritmo em C#
...
tam
int tam = n; 5 i
while (tam > 1){
swap(1, tam--); filho 20
reconstruir(tam);
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 20 101 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5 i
while (tam > 1){
swap(1, tam--); filho 20
reconstruir(tam);
}
}
101 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 20 101 30 63 47 115
}
} 1 2 3 4 5 6
} true: 20 < 101
Algoritmo em C#
...
tam
int tam = n; 5 i
while (tam > 1){
swap(1, tam--); filho 101
reconstruir(tam);
}
}
20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 101 20 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5 i
while (tam > 1){
swap(1, tam--); filho 101
reconstruir(tam);
}
}
20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 101 20 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5 i
while (tam > 1){
swap(1, tam--); filho 101
reconstruir(tam);
}
}
20 30
void reconstruir(int tam){
int i = 1; true: 2 <= 2
== while
true (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 101 20 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
101
}
reconstruir(tam); i
}
filho 20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 101 20 30 63 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
101
}
reconstruir(tam); i
}
filho 20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 63 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 101 20 30 63 47 115
}
} 1 2 3 4 5 6
} true: 20 < 63
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
101
}
reconstruir(tam); i
}
filho 63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 101 63 30 20 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
101
} i
}
filho 63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 101 63 30 20 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
101
} i
}
filho 63 30
void reconstruir(int tam){
int i = 1; false: 4 <= 2
while (hasFilho(i, tam) == true){ 20 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 101 63 30 20 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
101
}
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 101 63 30 20 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 5
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
101
} true: 5 > 1
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20 47
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 101 63 30 20 47 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
47
}
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 47 63 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
47
}
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 47 63 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
... filho
tam
int tam = n; 4 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
47
}
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 47 63 30 20 101 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (125)
Heapsort
Algoritmo em C#
... filho
tam
int tam = n; 4 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
47
}
}
63 30
void reconstruir(int tam){
int i = 1; true: 1 <= 2
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 47 63 30 20 101 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (126)
Heapsort
Algoritmo em C#
...
tam
int tam = n; 4 i
while (tam > 1){
swap(1, tam--); filho 47
reconstruir(tam);
}
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 47 63 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4 i
while (tam > 1){
swap(1, tam--); filho 47
reconstruir(tam);
}
}
63 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 47 63 30 20 101 115
}
} 1 2 3 4 5 6
} true: 47 < 63
Algoritmo em C#
...
tam
int tam = n; 4 i
while (tam > 1){
swap(1, tam--); filho 63
reconstruir(tam);
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4 i
while (tam > 1){
swap(1, tam--); filho 63
reconstruir(tam);
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4 i
while (tam > 1){
swap(1, tam--); filho 63
reconstruir(tam);
}
}
47 30
void reconstruir(int tam){
int i = 1; true: 2 <= 2
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
63
}
reconstruir(tam); i
}
filho 47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
63
}
reconstruir(tam); i
}
filho 47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
} false: 47 < 20
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
63
}
reconstruir(tam); i
}
filho 47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
} false: 47 < 20
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
63
} i
}
filho 47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
63
} i
}
filho 47 30
void reconstruir(int tam){
int i = 1; false: 4 <= 2
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
63
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 4
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
63
} true: 4 > 1
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){ 20
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 63 47 30 20 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 20 47 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 20 47 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
... filho
tam
int tam = n; 3 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
20
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 20 47 30 63 101 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (141)
Heapsort
Algoritmo em C#
... filho
tam
int tam = n; 3 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
20
}
}
47 30
void reconstruir(int tam){
int i = 1; true: 1 <= 1
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 20 47 30 63 101 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (142)
Heapsort
Algoritmo em C#
...
tam
int tam = n; 3 i
while (tam > 1){
swap(1, tam--); filho 20
reconstruir(tam);
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 20 47 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3 i
while (tam > 1){
swap(1, tam--); filho 20
reconstruir(tam);
}
}
47 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 20 47 30 63 101 115
}
} 1 2 3 4 5 6
} true: 20 < 47
Algoritmo em C#
...
tam
int tam = n; 3 i
while (tam > 1){
swap(1, tam--); filho 47
reconstruir(tam);
}
}
20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 47 20 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3 i
while (tam > 1){
swap(1, tam--); filho 47
reconstruir(tam);
}
}
20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 47 20 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3 i
while (tam > 1){
swap(1, tam--); filho 47
reconstruir(tam);
}
}
20 30
void reconstruir(int tam){
int i = 1; false: 2 <= 1
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 47 20 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
47
}
}
20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 47 20 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 3
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
47
} true: 3 > 1
}
20 30
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 47 20 30 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 2
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
30
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 2
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
30
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
... filho
tam
int tam = n; 2 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
30
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (152)
Heapsort
Algoritmo em C#
... filho
tam
int tam = n; 2 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
30
}
}
20
void reconstruir(int tam){
int i = 1; true: 1 <= 1
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
} filho
?
---------------------------- Algoritmos e Estruturas de Dados (153)
Heapsort
Algoritmo em C#
...
tam
int tam = n; 2 i
while (tam > 1){
swap(1, tam--); filho 30
reconstruir(tam);
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 2 i
while (tam > 1){
swap(1, tam--); filho 30
reconstruir(tam);
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
} false: 30 < 20
Algoritmo em C#
...
tam
int tam = n; 2 i
while (tam > 1){
swap(1, tam--); filho 30
reconstruir(tam);
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
i filho
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
} false: 30 < 20
Algoritmo em C#
...
tam
int tam = n; 2 i
while (tam > 1){
swap(1, tam--); filho 30
reconstruir(tam);
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 2 i
while (tam > 1){
swap(1, tam--); filho 30
reconstruir(tam);
}
}
20
void reconstruir(int tam){
int i = 1; false: 2 <= 1
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) { i
swap(i, filho);
i = filho;
filho
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 2
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
30
}
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 2
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
30
} true: 2 > 1
}
20
void reconstruir(int tam){
int i = 1;
while (hasFilho(i, tam) == true){
int filho = getMaiorFilho(i, tam);
if (array[i] < array[filho]) {
swap(i, filho);
i = filho;
} else {
i = tam; 30 20 47 63 101 115
}
} 1 2 3 4 5 6
}
Algoritmo em C#
...
tam
int tam = n; 1
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
Algoritmo em C#
...
tam
int tam = n; 1
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
Algoritmo em C#
... filho
tam
int tam = n; 1 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
20
}
}
Algoritmo em C#
... filho
tam
int tam = n; 1 i
while (tam > 1){ ?
swap(1, tam--);
reconstruir(tam);
20
}
}
Algoritmo em C#
...
tam
int tam = n; 1
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
}
}
Algoritmo em C#
...
tam
int tam = n; 1
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
20
} false: 1 > 1
}
20 30 47 63 101 115
1 2 3 4 5 6
Algoritmo em C#
int tam = n;
...
while (tam > 1){
swap(1, tam--);
reconstruir(tam);
}
}
20 30 47 63 101 115
1 2 3 4 5 6
return filho; 2 4
i
return filho; 2 4
i
}
i
63 47 30 20 101 115
1 2 3 4 5 6
---------------------------- Algoritmos e Estruturas de Dados (170)
Heapsort
Agenda
• Definição de Heap
• Funcionamento básico
• Algoritmo em C#
Algoritmo em C#
void heapsort() {
//Contrução do heap
for (int tam = 2; tam <= n; tam++){
construir(tam);
}
• Logo:
𝚯(n*lg(n))
Exercício (4)
• Mostre todas as comparações e movimentações do algoritmo anterior para
o array abaixo: