Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Documentos relacionados
Algoritmos de ordenação Heapsort

Análise de algoritmos

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Análise de algoritmos

Estruturas de Dados 2

Heap Sort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Algoritmos e Estrutura de Dados

Ordenação Interna. Prof. Jonas Potros

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

Algoritmos de ordenação Quicksort

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Algoritmos de Ordenação: Cota Inferior

Análise e Complexidade de Algoritmos

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Projeto e Análise de Algoritmos

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

Bubble Sort. Tempo total O(n 2 )

Métodos de Ordenação Parte 3

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Heapsort ordenação por árvore de seleção

Análise de Algoritmos Algoritmos de Ordenação

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Heaps binomiais. Gabriel Pedro de Castro. 20 de setembro de 2007

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Análise de Algoritmos

Análise de algoritmos

Estruturas de Dados 2

Análise de Complexidade para algoritmos iterativos e recursivos

3.3 Ordenação por Heap (Heapsort)

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Algoritmos e Estruturas de Dados 2006/2007

Análise de Algoritmos

Algoritmos e Estrutura de Dados. Aula 04 Recorrência Prof. Tiago A. E. Ferreira

Análise de algoritmos

Algoritmos de Ordenação: QuickSort

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Análise de algoritmos

Heapsort ordenação por árvore de seleção

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

BCC202 - Estrutura de Dados I

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

DAINF - Departamento de Informática

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Análise e Síntese de Algoritmos

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Ordenação. Insertion Sort

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear

Algoritmos de Ordenação: HeapSort

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Ordenação e Busca em Arquivos

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Priority Queues. Problem. Let S={(s1,p1), (s2,p2),,(sn,pn)} where s(i) is a key and p(i) is the priority of s(i).

INF 1010 Estruturas de Dados Avançadas

CES-11. Algoritmos e Estruturas de Dados. Representação. A estrutura heap. Heap é uma árvore binária com duas propriedades:

Ordenação de Dados (III) HeapSort

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Algoritmos de Ordenação

Solução de Recorrências

Ordenação em tempo linear

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Estruturas Discretas

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

1 a Lista de Exercícios

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Algoritmos e Estrutura de Dados. Aula 13 Estrutura de Dados: Árvores de Pesquisa Binária Prof. Tiago A. E. Ferreira

INF111 Programação II Aulas 11, 12, 13 Ordenação

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Limite assintótico para a ordenação, Ordenação em tempo linear

Estruturas de Dados Algoritmos de Ordenação

Ordenação por Intercalação Métodos de Ordenação Parte 4

Algoritmos de Ordenação e Pesquisa. Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados

Análise de Algoritmos

Métodos de Ordenação Parte 4

Análise de Algoritmos

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

AULA 13. Algoritmos p.526/582

Análise empírica de algoritmos de ordenação

Transcrição:

Tópico 5 Algoritmos de Ordenação Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. 1

Problema Computacional: Ordenação Problema computacional que surge em diversas situações. Definição: Input: Uma sequência de n números:{a 1 a 2, a 3,., a n } Output: Uma reordenação da sequência em {a 1,a 2, a 3...a n } tal que a 1 a 2 a 3... a n

Insertion sort i j Key 12 1 2 3 4 5 6 7 8 9 10 81 12 44 23 67 90 15 9 22 50 INSERTION-SORT (A, n) for j 2 to n do key A[ j] i j 1 while i > 0 and A[i] > key do A[i+1] A[i] i i 1 A[i+1] = key j i Key 12 0 1 2 3 4 5 6 7 8 9 10 81 81 44 23 67 90 15 9 22 50 i j Key 12 0 1 2 3 4 5 6 7 8 9 10 12 81 44 23 67 90 15 9 22 50

Insertion sort i j Key 44 0 1 2 3 4 5 6 7 8 9 10 12 81 44 23 67 90 15 9 22 50 INSERTION-SORT (A, n) for j 2 to n do key A[ j] i j 1 while i > 0 and A[i] > key do A[i+1] A[i] i i 1 A[i+1] = key i j Key 44 0 1 2 3 4 5 6 7 8 9 10 12 81 81 23 67 90 15 9 22 50 j i Key 44 0 1 2 3 4 5 6 7 8 9 10 12 44 81 23 67 90 15 9 22 50

Insertion sort i j Key 23 0 1 2 3 4 5 6 7 8 9 10 12 44 81 23 67 90 15 9 22 50 INSERTION-SORT (A, n) for j 2 to n do key A[ j] i j 1 while i > 0 and A[i] > key do A[i+1] A[i] i i 1 A[i+1] = key j i Key 23 0 1 2 3 4 5 6 7 8 9 10 12 44 81 81 67 90 15 9 22 50 j i Key 23 0 1 2 3 4 5 6 7 8 9 10 12 44 44 81 67 90 15 9 22 50

Insertion sort i j Key 23 0 1 2 3 4 5 6 7 8 9 10 12 23 44 81 67 90 15 9 22 50 INSERTION-SORT (A, n) for j 2 to n do key A[ j] i j 1 while i > 0 and A[i] > key do A[i+1] A[i] i i 1 A[i+1] = key i j Key 67 0 1 2 3 4 5 6 7 8 9 10 12 23 44 81 67 90 15 9 22 50 i j Key 67 0 1 2 3 4 5 6 7 8 9 10 12 23 44 67 81 90 15 9 22 50

Analisando Insertion sort INSERTION-SORT (A, n) 1.for j 2 to n (n) 2. do key A[ j] (n) 3. i j 1 (n) 4. while i > 0 and A[i] > key n (n)= (n 2 ) 5. do A[i+1] A[i] n (n)= (n 2 ) 6. i i 1 n (n) = (n 2 ) 7. A[i+1] = key (n) Tempo total de execução para entrada de tamanho n: (n 2 ) Prove!!!

Analisando Insertion sort INSERTION-SORT (A, n) Custo Número de execuções 1.for j 2 to n c1 n 2. do key A[ j] c2 n-1 3. i j 1 c3 n-1 4. while i > 0 and A[i] > key c4 5. do A[i+1] A[i] c5 6. i i 1 c6 7. A[i+1] = key c7 n-1 Tempo total de execução para entrada de tamanho n:

PIOR CASO!! i j Key 37 0 1 2 3 4 5 6 7 8 9 10 42 53 74 81 37 30 22 15 9 1 i j Key 37 0 1 2 3 4 5 6 7 8 9 10 INSERTION-SORT (A, n)... do A[i+1] A[i] i i 1... 42 53 74 81 81 30 22 15 9 1 i j Key 37 0 1 2 3 4 5 6 7 8 9 10 42 53 74 74 81 30 22 15 9 1

PIOR CASO!! INSERTION-SORT (A, n)... do A[i+1] A[i] i i 1... j i Key 37 0 1 2 3 4 5 6 7 8 9 10 42 53 53 74 81 30 22 15 9 1 i j Key 37 0 1 2 3 4 5 6 7 8 9 10 42 42 53 74 81 30 22 15 9 1 i j A[i+1] =key 0 1 2 3 4 5 6 7 8 9 10 37 42 53 74 81 30 22 15 9 1

Analisando Insertion sort Tempo total de execução para o pior caso - Vetor ordenado em ordem oposta ao ordenamento proposto.

Merge sort p r 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60 q=4 p r p r 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60 q=2 q=6

p r 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60 q=4 p r p r 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60 q=2 q=6 p r p r p r p r 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60 q=1 q=3 q=6 q=7 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60

p r 1 2 3 4 5 6 7 8 10 20 20 30 40 50 60 70 q=4 p r p r 1 2 3 4 5 6 7 8 20 40 50 70 10 20 30 60 q=2 q=6 p r p r p r p r 1 2 3 4 5 6 7 8 20 50 40 70 10 30 20 60 q=1 q=3 q=6 q=7 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60

p=1q=2 r=4 1 2 3 4 5 6 7 8 20 40 50 70 10 20 30 60 1 2 3 4 5 6 7 8 20 50 40 70 10 30 20 60 q=1 q=3 q=6 q=7 1 2 3 4 5 6 7 8 50 20 40 70 10 30 20 60

Analisando Merge sort T (n) : tempo no pior caso (n = r p + 1). Relação de recorrência: 1.T (1) = (1) n=1. 2.T (n) = 2.T(n/2)+D(n)+C(n) n>1. D(n): Tempo para dividir o problema C(n): Tempo para combinar o problema

Analisando Merge sort Relação de recorrência: 1.T (n) = (1) n=1. 2.T (n) = 2.T(n/2)+D(n) + C(n) n>1. T(n) = Θ(1) n=1 2T(n/2) + Θ(n) n>1 Usando árvore de recorrência e método da substituição, ou o teorema mestre, provamos que T(n) = O(nlg)

18

Heaps Uma estrutura de dados heap (binária) é um vetor de objetos que pode ser vista como uma árvore binária aproximadamente completa. A árvore é completamente preenchida em todos os níveis, exceto possivelmente pelo nível mais baixo que é preenchido a partir da esquerda até um certo ponto da estrutura.

Heaps Podemos representar uma heap como vetor, calculando os índices que ligam nós pais e filhos esquerdo e direito: Parent(i) 1.return i/2 Left(i) 1.return 2i Right(i) 1.return 2i+1

Heaps 16 4 10 14 7 9 3 2 8 1 A = 16 4 10 14 7 9 3 2 8 1

Heaps Parent(4)=2 16 14 Left(3)=6 10 Right(3)=7 8 7 9 3 2 4 1 Parent(10)=5 A = 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Propriedades da Heap Max-heap : A[Parent(i)] A[i] Min-heap : A[Parent(i)] A[i] A altura de um nó na árvore é dada pelo número de arestas no caminho mais longo do nó atual até um nó folha. A altura da árvore é dada pela altura do nó raiz. A altura de uma heap de n elementos, baseada em uma árvore binária completa, será Θ(lg n).

Propriedades da Heap Provar que o nó i pertence ao nı vel lg i lg9 =3 16 lg6 =2 lg3 =1 14 10 8 7 9 3 2 4 1 A = 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Propriedades da Heap Provar que o nó i pertence ao nı vel lg i Um nível m possui os nós 2 m, 2 m +1, 2 m +2,...2 m+1-1. A[1] A[2] =A[ 2 1 ] 16 A[3]= A[2 1 +1] 14 10 A[4] = A[2 2 ] A[5 ]=A[2 2 +1] A[6]=A[2 2 +2] 8 7 9 3 A[7]=A[2 2 +3] 2 4 1 A[8]=A[2 3 ] A[9] = A[2 3 +1] A = A[10 ]=A[2 3 +2 ] 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Propriedades da Heap Provar que o nó i pertence ao nı vel lg i Um nível m possui os nós 2 m, 2 m +1, 2 m +2,...2 m+1-1. Um nó i em um nível m estará entre 2 m i < 2 m+1 lg 2 m lg i < lg (2 m+1 ) m lg i < m+1 Logo, o nível do nó i será m= lg i A altura de uma heap com n elementos será h= lg n O total de níveis de uma heap com n elementos será 1+ lg n.

Rotinas para heap Max-Heapify Build-Max-Heap Heapsort Max-Heap-Insert Heap-Extract-Max Heap-Increase-Key Heap-Maximum

Max-Heapify(A, i) Essa rotina assegura a propriedade max-heap. Max-Heapify(A,i) 1 l = Left(i) 2 r = Right(i) 3 if l A.heap-size and A[l] > A[i] 4 largest = l 5 else largest = i 6 if r A.heap-size and A[r] > A[largest] 7 largest = r 8 if largest i 9 exchange A[i] A[largest] 10 Max-Heapify(A, largest)

Max-Heapify(A,i) Max-Heapify(A,2) 16 4 10 14 7 9 3 2 8 1 A = 1 2 3 4 5 6 7 8 9 10 16 4 10 14 7 9 3 2 8 1

Max-Heapify(A,i) Max-Heapify(A,2) -> Max-Heapify(A,4) 16 14 10 4 7 9 3 2 8 1 A = 1 2 3 4 5 6 7 8 9 10 16 14 10 4 7 9 3 2 8 1

Max-Heapify(A,i) Max-Heapify(A,2) -> Max-Heapify(A,4) -> Max-Heapify(A,9) 16 14 10 8 7 9 3 2 4 1 A = 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Analisando Max-Heapify(A, i) Essa rotina assegura a propriedade max-heap. Max-Heapify(A,i) 1 l = Left(i) 2 r = Right(i) 3 if l A.heap-size and A[l] > A[i] 4 largest = l 5 else largest = i 6 if r A.heap-size and A[r] > A[largest] 7 largest = r 8 if largest i 9 exchange A[i] A[largest] 10 Max-Heapify(A, largest) (1) (1) (1) O(1) O(1) (1) O(1) (1) O(1) T(2n/3)

Analisando Max-Heapify(A, i) De onde vem T(2n/3)?????? Prova: Suponha uma árvore binária completa com altura h. A heap terá um total de 2 h -1 nós. No pior caso, a subárvore esquerda da heap será completa com altura h-1 e 2 h-1-1 nós. No pior caso, a subárvore direita da heap será completa com altura h-2 e 2 h-2-1 nós.

Analisando Max-Heapify(A, i) De onde vem T(2n/3)?????? Prova: E = 2 h-1-1 nós na subárvore esquerda. D= 2 h-2-1 nós na subárvore direita. H = 1(raiz)+ D+E = 1+2 h-2-1 + 2 h-1-1= 3.2 h-2-1. E/H taxa de ocupação de E em H. E/H = (2 h-1-1)/(3.2 h-2-1) = (2.2 h-2-1)/(3.2 h-2-1) E/H = lim h (2.2 h-2-1)/(3.2 h-2-1)=2/3

Analisando Max-Heapify(A, i) Provando que Max-Heapify é O(lgn) O Considerando as instruções do algoritmo, temos: T(n) T(2n/3)+ (1). Pelo teorema mestre, a=1, b=⅔ f(n)=k n logb(a) =n log2/3(1) =n 0 =1. Logo, f(n)= (1) e estamos no caso 2 T(n)= (n logb(a) lgn)= (1.lgn)= (lgn)

Analisando Max-Heapify(A, i) Outra forma de analisar Max-Heapify é considerando a recursividade na altura da heap. Teremos T(h)=T(h-1)+ (1). Prove!!! Dica: A altura de uma heap com n elementos será h= lg n

Build-Max-Heap(A) Retorna uma max-heap a partir de um vetor desordenado. Build-Max-Heap(A) 1 A.heap-size = A.length 2 for i = A.length/2 downto 1 3 Max-Heapify(A, i)

Build-Max-Heap(A) Max-Heapify(A,5) 4 1 3 2 16 9 10 14 8 7 A = 1 2 3 4 5 6 7 8 9 10 4 1 3 2 16 9 10 14 8 7

Build-Max-Heap(A) Max-Heapify(A,4) 4 1 3 2 16 9 10 14 8 7 A = 1 2 3 4 5 6 7 8 9 10 4 1 3 2 16 9 10 14 8 7

Build-Max-Heap(A) Max-Heapify(A,3) 4 1 3 14 16 9 10 2 8 7 A = 1 2 3 4 5 6 7 8 9 10 4 1 3 14 16 9 10 2 8 7

Build-Max-Heap(A) Max-Heapify(A,2) 4 1 10 14 16 9 3 2 8 7 A = 1 2 3 4 5 6 7 8 9 10 4 1 10 14 16 9 3 2 8 7

Build-Max-Heap(A) 4 Max-Heapify(A,2) -> Max-Heapify(A,5) 16 10 14 1 9 3 2 8 7 A = 1 2 3 4 5 6 7 8 9 10 4 16 10 14 1 9 3 2 8 7

Build-Max-Heap(A) Max-Heapify(A,2) -> Max-Heapify(A,5) 4 -> Max-Heapify(A,10) 16 10 14 7 9 3 2 8 1 A = 1 2 3 4 5 6 7 8 9 10 4 16 10 14 7 9 3 2 8 1

Build-Max-Heap(A) Max-Heapify(A,1) 4 16 10 14 7 9 3 2 8 1 A = 1 2 3 4 5 6 7 8 9 10 4 16 10 14 7 9 3 2 8 1

Build-Max-Heap(A) 16 4 10 14 7 9 3 2 8 1 Max-Heapify(A,1) ->Max-Heapify(A,2) A = 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Build-Max-Heap(A) Max-Heapify(A,1) -> Max-Heapify(A,2) 16 -> Max-Heapify(A,4) 14 10 4 7 9 3 2 8 1 1 2 3 4 5 6 7 8 9 10 A = 16 14 10 4 7 9 3 2 8 1

Build-Max-Heap(A) Max-Heapify(A,2) -> Max-Heapify(A,4) 16 -> Max-Heapify(A,9) 14 10 8 7 9 3 2 4 1 A = 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Analisando Build-Max-Heapify(A, i) Uma heap com n elementos tem altura lgn (Provado!!!). Uma heap com n elementos possui na altura h no máximo n/2 h+1 nós (Provar!!!). O tempo gasto por Max-Heapify quando executado para um nó é O(h). 48

Analisando Max-Heapify(A, i) No pior caso, teremos para todos os n/2 h+1 nós em todas as lgn alturas da heap:

Heapsort(A) Heapsort(A) 1 Build-Max-Heap(A) 2 for i = A.length downto 2 3 exchange A[1] A[i] 4 A.heap-size = A.heap-size -1 5 Max-Heapify(A,1)

Heapsort(A) 16 14 10 8 7 9 3 2 4 1 A = 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1

Heapsort(A) 1 14 10 8 7 9 3 2 4 16 i Max-Heapify(A,1) 14 8 10 4 7 9 3 2 1 16 i

Heapsort(A) 14 8 10 4 7 9 3 2 1 i 16 10 8 9 4 7 1 3 2 i 14 16

Heapsort(A) 9 8 3 4 7 1 2 i 10 14 16 8 7 3 4 2 1 i 9 10 14 16

Heapsort(A) 7 4 3 1 2 i 8 9 10 14 16 4 2 3 1 i 7 8 9 10 14 16

Heapsort(A) 3 2 1 i 4 7 8 9 10 14 16 2 1 i 3 4 7 8 9 10 14 16

Heapsort(A) 2 1 i 3 4 7 8 9 10 14 16 A = 1 2 3 4 5 6 7 8 9 1 2 3 4 7 8 9 10 14 16

Analisando o Heapsort(A) Heapsort(A) 1 Build-Max-Heap(A) 2 for i = A.length downto 2 3 exchange A[1] A[i] 4 A.heap-size = A.heap-size -1 5 Max-Heapify(A,1) (n) (n) (n) (n) n (lgn) Pior caso: (nlgn)