Logo Passei Direto
Buscar

ED09 Ordenacao de dados completo

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

AMS – ADS 
Estruturas de Dados
Tipos Abstratos de Dados:
manipulação
Algoritmos de Ordenação de Dados
Prof. Eliane Oliveira Santiago
Conteúdo Programático
Ordenação de Dados 
a. Ordenação por troca: 
i. BubbleSort (método da bolha); 
ii. QuickSort (método da troca e partição)
b. Ordenação por seleção: 
i. SelectionSort (método da seleção direta); 
ii. HeapSort (método da seleção em árvore) 
c. Ordenação por inserção: 
i. InsertionSort (método da inserção direta); 
ii. BinaryInsertionSort (método da inserção direta binária)
d. Outros métodos: 
i. MergeSort (método da intercalação); 
ii. BucketSort (método da distribuição de chave) 
iii. Radix
Glossário
Ordenar: processo de reorganizar um 
conjunto de objetos em uma ordem 
ascendente ou descendente, com o objetivo 
de facilitar a recuperação posterior de itens 
do conjunto ordenado.
Complexidade de algoritmos: taxa na qual 
o armazenamento ou tempo de execução 
cresce em função do tamanho dos dados de 
entrada.
Análise Assintótica: a medida em que a 
entrada cresce, a complexidade do 
algoritmo proporcionalmente tende a uma 
função conhecida 
O(n), O(n2), O(2n), O(nn)
O(n log n), O(log n)
Melhor Caso, Pior Caso, Caso Médio
Melhor Caso: [Big-O]
 Propriedade dos dados que resultam no melhor resultado possível
Pior Caso: [Big-omega] 
 Propriedade dos dados que resultam no pior resultado possível
Caso Médio: [Big-theta]
 Obtido fazendo uma media do desempenho do algoritmo atuando 
sobre todos os conjuntos de dados possíveis
Resumo das complexidades
Denominações e Notações
BubbleSort (método da bolha); 
QuickSort (método da troca e partição)
Algoritmos de Ordenação por troca
Técnica basica
1. Comparam-se dois elementos e trocam-se suas posições
se o segundo elemento e menor do que o primeiro
2. Sao feitas varias passagens pela tabela
3. Em cada passagem, comparam-se dois elementos
adjacentes
4. Se estes elementos estiverem fora de ordem, eles são
trocados.
BubbleSort()
O algoritmo BubbleSort()
O algoritmo de ordenação da bolha (bubble sort)
percorre a coleção de elementos trocando a posição
de dois elementos consecutivos cada vez que
estiverem fora de ordem. Ao final de cada iteração,
o elemento maior estará no fim da coleção e pode
ficar fora da próxima rodada; ao mesmo tempo,
elementos menores mover-se-ão em direção ao início
da lista.
Bubble
3 10 10 10 40
2 20 20 40 10
1 30 40 20 20
0 40 30 30 30
3 10 10 10 40 40 40
2 20 20 40 10 10 30
1 30 40 20 20 30 10
0 40 30 30 30 20 20
Bubble
3 10 10 10 40
2 20 20 40 10
1 30 40 20 20
0 40 30 30 30
3 10 10 10 40 40 40 40
2 20 20 40 10 10 30 30
1 30 40 20 20 30 10 20
0 40 30 30 30 20 20 10
1a iteração
2a iteração 3a iteração
BubbleSort
Algoritmo Interativo para Ordenação por Troca, método
BubbleSort (bolha) para ordenação em ordem decrescente
public class Bolha {
public void bubbleSort(int v[]) {
for (int i = v.length; i >= 1; i--) {
for (int j = 1; j v[j]) {
int aux = v[j];
v[j] = v[j - 1];
v[j - 1] = aux;
}
}
}
}
}
1
2
3
4
3
2
1
0
1
2
4
3
1
4
2
3
4
1
2
3
4
1
2
3
4
1
3
2
4
3
1
2
4
3
2
1
4
3
1
2
1
2
3
4
3
2
1
0
1
2
4
3
1
4
2
3
4
1
2
3
4
1
2
3
4
1
3
2
4
3
1
2
4
3
2
1
4
3
1
2
QuickSort é baseado no conceito Dividir e Conquistar.
Este algoritimo divide o vetor em três partes principais:
1. Elementos menores que o pivô (à esquerda)
2. Pivô (elemento central)
3. Elementos maiores que o pivô (à direita)
QuickSort()
Quicksort()
Pivot: pode ser qualquer elemento do array (o primeiro, o último ou um randômico).
Exemplo: No vetor V = {52, 37, 63, 14, 17, 8, 6, 25}, considerando o elemento pivô como sendo o último do vetor (25),
após o primeiro passo, o vetor ficará {6 8 17 14 25 63 37 52} com o pivô na posição correta.
Após o primeiro passo, o pivô será definido em sua posição, com todos os elementos menores à esquerda e todos os
elementos maiores à direita.
6 8 17 14 e 63 37 52 são considerados como dois sub-arrays separados, e a lógica recursiva será aplicada sobre eles,
repetidamente até que o vetor esteja completamente ordenado.
V = {52, 37, 63, 14, 17, 8, 6, 25} //vetor de entrada = pivot é a última posição do vetor (25)
V1= {6, 8, 17, 14} e V2 = {63, 37, 52}  V = {6, 8, 17, 14, 25, 63, 37, 52}
V1.1= {6, 8, 14, 17} e V2.1 = {37, 52, 63}  V = {6, 8, 14, 17, 25, 37, 52, 63}
V1.1.1= {6, 8} V1.1.2 = {17} V2.1.1 = {37} V2.1.2 = {63}  V = {6, 8, 14, 17, 25, 37, 52, 63}
V1.1.1.1= {6, 8}  V = {6, 8, 14, 17, 25, 37, 52, 63}
Pseudocódigo
procedimento QuickSort(X[], IniVet, FimVet)
var
i, j, pivo, aux
início
i pivo) faça
| | j IniVet) então
| QuickSort(X, IniVet, j)
fimSe
se (i 
// trocar dois números
void swap(int* a, int* b){
int t = *a;
*a = *b;
*b = t;
}
/* 
a[] é o vetor
p é o índice inicial (isto é, 0) 
r é o último índice do vetor
*/
void quicksort(int a[], int p, int r){
if(p pivo){ 
vet[j] = vet[j-1]; 
j--; 
}
vet[j] = ch; 
pivo++; 
}
}
if(pivo-1 >= esq){ 
quick(vet,esq,pivo-1); 
}
if(pivo+1sort) é um algoritmo de ordenação,
conceitualmente, mais simples.
É baseado em se passar sempre o menor valor do vetor para a primeira posição (ou o maior
dependendo da ordem requerida), depois o segundo menor valor para a segunda posição, e
assim é feito sucessivamente com os n-1 elementos restantes, até os últimos dois elementos.
Processo:
1. Encontrar o menor elemento na matriz e trocá-lo com o elemento da primeira posição do vetor.
2. Encontrar o segundo menor elemento e trocá-lo com o elemento da segunda posição
3. Repetir até que todo o vetor esteja classificado.
SelectionSort
Selection Sort
Ordenação de vetor pela seleção do menor valor.
1. Procure a entrada que apresenta o menor valor de todo o vetor.
2. Troque seu conteúdo com aquele da primeira posição do vetor. Desta
forma, o menor valor estará na posição correta.
3. Repita então o procedimento para o restante do vetor, excluindo os
elementos que já estão na posição correta.
Selection Sort
Ordenação de vetor pela seleção do menor valor.
Implementação do Algoritmo SelectionSort
// Programa C implementando SelectionSort
# include 
// função para trocar elementos em um determinado indice
void swap(int vetor[], int firstIndex, int secondIndex){ 
int temp;
temp = vetor[firstIndex];
vetor[firstIndex] = vetor[secondIndex];
vetor[secondIndex] = temp;
}
// função para buscar o menor elemento em um sub-array
int indexOfMinimum(int vetor[], int startIndex, int n){
int minValue = vetor[startIndex];
int minIndex = startIndex;
for(int i = minIndex + 1; i A[i])
5. | | | minIndex ← i
6. | | fim_se
7. | fim_para
8. | retorne minIndex
9. fim_min
/* O método trocar(A, i, j) 
troca os valores das posições 
i e j do vetor A */
1. trocar(A, i, j)
2. | temp ← A[i]
3. | A[i] ← A[j]
4. | A[j] ← temp
5. fim_trocar
1. selectionSort(A[1...n])
2. | para i ← 1 até n - 1
3. | | minIndex ← min(A, i, n)
4. | | trocar(A, i, minIndex)
5. | fim_para
6. fim_selectionSort
O método
SelectionSort
modularizarizado
01. selectionSort(A[1...n])
02. | para i ← 1 até n - 1
03. | | minIndex ← i
04. | | para j ← i + 1 até n
05. | | | se(A[minIdex] > A[j])
06. | | | | minIndex ← j
07. | | | fim_se
08. | | fim_para
09. | | temp ← A[i]
10. | | A[i] ← A[minIndex]
11. | | A[minIndex] ← temp
12. | fim_para
13. fim_selectionSort
O método SelectionSort não modularizarizado
Um heap é uma árvore binária a qual tem uma propriedade
que cada filho é menor (ou maior) que o pai.
Frequentemente implementado como um vetor, onde os
filhos de um elemento na poposição n estão nas posições
2n+1 e 2n+2.
Existem dois tipos de heaps binários:
❑ Heaps máximos
❑ Heaps mínimos
Método da Seleção em Árvore: HeapSort
O que é um Heap?
Heap é uma estrutura de dados especial, baseada em árvore, que 
satisfaz as seguintes propriedades especiais:
Propriedade Shape: a estrutura de dados Heap é sempre uma Árvore 
Binária Completa, o que significa que todos os níveis da árvore são 
totalmente preenchidos.
Propriedade Heap: todos os nós são maiores ou iguais a ou menores ou
iguais a cada um de seus filhos. Se os nós pais forem maiores que os
nós filhos, o heap será chamado de Max-Heap e, se os nós pais forem
menores que os nós filhos, o heap será chamado Min-Heap.
Min-Heap e Max-Heap
Heap máximo (Max-Heap)
Em ambos os tipos, os valores nos nós satisfazem a uma propriedade de heap, cujos
detalhes específicos dependem do tipo de heap.
Em um heap máximo, a propriedade de heap máximo é que, para todo nó i diferente
da raíz, 
A[pai(i)>=A[i]
isto é, o valor de um nó é no máximo o valor de seu pai.
Desse modo, o maior elemento em um heap máximo é armazenado na raiz, e a
subárvore que tem raiz em um nó contém valores meores que o próprio nó.
Heap mínimo (Min-heap)
Um heap mínimo é organizado de modo oposto.
Em um heap mínimo, a propriedade de heap máximo é que, para todo nói
diferente da raíz, 
A[pai(i)0
30
1
62
2
78
3
45
4
50
índices (i)
Poda a última folha da árvora
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 62 78 45 50 85 99V
0
30
1
62
2
78
3
45
4
50
índices (i)
Repita o processo heapfy para V[0..n-3]
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 62 78 45 50 85 99V
0
30
1
62
2
78
3
45
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 62 78 45 50 85 99V
0
30
1
62
2
78
3
45
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
62 30 78 45 50 85 99V
0
62
1
30
2
78
3
45
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
62 30 78 45 50 85 99V
0
62
1
30
2
78
3
45
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 30 62 45 50 85 99V
0
78
1
30
2
62
3
45
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 30 62 45 50 85 99V
0
78
1
30
2
62
3
45
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 45 62 30 50 85 99V
0
78
1
45
2
62
3
30
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 45 62 30 50 85 99V
0
78
1
45
2
62
3
30
4
50
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 50 62 30 45 85 99V
0
78
1
50
2
62
3
30
4
45
índices (i)
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 50 62 30 45 85 99V
0
78
1
50
2
62
3
30
4
45
índices (i)
O Maior elemento do vetor está na raiz
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
78 50 62 30 45 85 99V
0
78
1
50
2
62
3
30
4
45
índices (i)
Trocar a raiz com a última folha (V[n-3]
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 50 62 30 78 85 99V
0
45
1
50
2
62
3
30
4
78
índices (i)
Trocar a raiz com a última folha (V[n-3]
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 50 62 30 78 85 99V
0
45
1
50
2
62
3
30
4
78
índices (i)
O 3o. Maior elemento está na posição correta
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 50 62 30 78 85 99V
0
45
1
50
2
62
3
30
4
78
índices (i)
Poda a árvore na última folha
Entendendo o funcionamento do HeapSort
3a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 50 62 30 78 85 99V
0
45
1
50
2
62
3
30
índices (i)
Repete o processo para V[0..n-4]
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 50 62 30 78 85 99V
0
45
1
50
2
62
3
30
índices (i)
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 50 62 30 78 85 99V
0
45
1
50
2
62
3
30
índices (i)
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
50 45 62 30 78 85 99V
0
50
1
45
2
62
3
30
índices (i)
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
50 45 62 30 78 85 99V
0
50
1
45
2
62
3
30
índices (i)
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
62 45 50 30 78 85 99V
0
62
1
45
2
50
3
30
índices (i)
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
62 45 50 30 78 85 99V
0
62
1
45
2
50
3
30
índices (i)
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
62 45 50 30 78 85 99V
0
62
1
45
2
50
3
30
índices (i)
Propriedades Shape e Heap-max 
satisfeitas
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
62 45 50 30 78 85 99V
0
62
1
45
2
50
3
30
índices (i)
Propriedades Shape e Heap-max 
satisfeitas
Troca a raiz com a última folha
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
2
50
3
62
índices (i)
Propriedades Shape e Heap-max 
satisfeitas
Troca a raiz com a última folha
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
2
50
3
62
índices (i)
O 4o. Maior elemento já está na
posição correta do vetor.
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
2
50
3
62
índices (i)
Poda a árvore na última folha
Entendendo o funcionamento do HeapSort
4a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
2
50
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
2
50
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
2
50
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
2
50
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
2
50
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
50 30 45 62 78 85 99V
0
50
1
30
2
45
índices (i)
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
50 30 45 62 78 85 99V
0
50
1
30
2
45
índices (i)
Propriedades Shape e Heap
satisfeitas
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
50 30 45 62 78 85 99V
0
50
1
30
2
45
índices (i)
Troca a raiz com a última folha
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
2
50
índices (i)
Troca a raiz com a última folha
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
2
50
índices (i)
O Maior está na posição correta
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
2
50
índices (i)
Poda a árvore
Entendendo o funcionamento do HeapSort
5a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
índices (i)
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
índices (i)
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
índices (i)
A árvore atende as propriedades Shape e Heap
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
45 30 50 62 78 85 99V
0
45
1
30
índices (i)
Troca a raiz com a última folha
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
índices (i)
Troca a raiz com a última folha
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
índices (i)
O Maior está na posição correta
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
1
45
índices (i)
Podar a árvore
Entendendo o funcionamento do HeapSort
6a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
índices (i)
Entendendo o funcionamentodo HeapSort
7a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
7a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
7a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
índices (i)
Repita o processo
Entendendo o funcionamento do HeapSort
7a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
0
30
índices (i)
Poda a árvore
Entendendo o funcionamento do HeapSort
7a. Iteração: criar o heap 
0 1 2 3 4 5 6
30 45 50 62 78 85 99V
índices (i)
Vetor Ordenado.
Implementando 
o HeapSort
parte #1
#include 
using namespace std;
void heapify(int vetor[], int n, int i){
int largest = i;
int l = 2*i + 1;
int r = 2*i + 2;
// verifica se filho à esquerda é maior que a raiz
if (l vetor[largest]) largest = l;
// verifica se o filho à direita é maior que o maior até agora
if (r vetor[largest]) largest = r;
// se o maior não está na raiz 
if (largest != i){
swap(vetor[i], vetor[largest]);
// empilhar (heapify) recursivamente a sub-árvore afetada
heapify(vetor, n, largest);
}
}
Implementando 
o HeapSort
parte #1
#include 
using namespace std;
void heapify(int vetor[], int n, int i){
int largest = i;
int l = 2*i + 1;
int r = 2*i + 2;
// verifica se filho à esquerda é maior que a raiz
if (l vetor[largest]) largest = l;
// verifica se o filho à direita é maior que o maior até agora
if (r vetor[largest]) largest = r;
// se o maior não está na raiz 
if (largest != i){
swap(vetor[i], vetor[largest]);
// empilhar (heapify) recursivamente a sub-árvore afetada
heapify(vetor, n, largest);
}
}
void heapSort(int vetor[], int n){
// construa um heap (rearranja o vetor)
for (int i = n / 2 - 1; i >= 0; i--)
heapify(vetor, n, i);
// extrair um elemento por vez do heap
for (int i=n-1; i>=0; i--){
// mover a raiz atural para o fim
swap(vetor[0], vetor[i]);
// chamada da função heapify sobre o heap reduzido
heapify(vetor, i, 0);
}
}
/* função para escrever o vetor de tamanho n */
void printArray(int vetor[], int n){
for (int i = 0; i 0) {
i--;
t = a[i];
} else {
n--;
if (n a[filho]))
filho++;
if(a[filho] > t) {
a[pai] = a[filho];
pai = filho;
filho = pai * 2 + 1;
} else {
break;
}
}
a[pai] = t;
}
}
InsertionSort (método de inserção direta)
BinaryInsertionSort (método da inserção direta binária)
Métodos de Ordenação por Inserção
Método de ordenação por inserção direta
InsertionSort
InsertionSort
Método de 
ordenação por 
inserção direta
InsertionSort
Método de ordenação por inserção direta
Método de Ordenação por Inserção Direta: 
InsertionSort
void insercao (int vet, int tam){
int i, j, x;
for (i=2; i= 0) && (vetor[i] > key); i--) 
{
21. vetor[i + 1] = vetor[i];
22. }
23. vetor[i + 1] = key;
24. }
25. }
Método da inserção direta binária
A classificação de inserção binária BinaryInsertionSort é uma variante da
classificação de inserção direta InsertionSort, na qual o local adequado para
inserir o elemento selecionado é encontrado usando a pesquisa binária.
A pesquisa binária reduz o número de comparações para encontrar o local 
correto na parte classificada dos dados.
BinaryInsertionSort
Método de Ordenação por Inserção Direta Binária: 
BinaryInsertionSort
O algoritmo de inserção direta apresentado na seção anterior faz uma pesquisa linear
para encontrar a posição em que a inserção será realizada.
No entanto, como o elemento é inserido em uma sequência que já está classificada,
podemos usar uma pesquisa binária em vez de uma pesquisa linear.
Enquanto uma pesquisa linear requer comparações O(n) no pior caso, uma pesquisa
binária requer apenas comparações O(log(n)).
Portanto, se o custo de uma comparação for significativo, a pesquisa binária poderá
ser preferida.
Algoritmo BinaryInsertionSort
import java.util.Arrays;
public class BinaryInsertionSort {
public static void main(String[] args) {
final int[] input = { 4, 10, 3, 1, 9, 15 };
System.out.println("Before Sorting - " + Arrays.toString(input));
new BinaryInsertionSort().sort(input);
System.out.println("After Sorting - " + Arrays.toString(input));
}
public void sort(int array[]) {
for (int i = 1; icorreta
}
}
}
Análise de Complexidade do algoritmo de 
Ordenação por Inserção Direta Binária: BinaryInsertionSort
 Na pior das hipóteses, a classificação por inserção direta possui custo de tempo proporcional 
a O(n), tempo em sua n-ésima iteração, enquanto o uso da pesquisa binária pode reduzi-lo a 
O(log(n)).
 A complexidade de tempo geral do algoritmo, na pior das hipóteses, ainda é O(n2) devido
ao número de trocas necessárias para colocar todos os elementos no local correto.
MergeSort: método de intercalação
BucketSort (método da distribuição de chave) 
Radix
Outros métodos
MergeSort é baseado no conceito Dividir e Conquistar, recursivamente,
consumindo menor tempo.
A matriz não classificada fornecida com n elementos é dividida em
n subarrays, cada um com um elemento, porque um único elemento
sempre é classificado em si.
Em seguida, mescla repetidamente essas sub-matrizes, para produzir
novas sub-matrizes ordenadas e, no final, uma matriz ordenada
completa é produzida.
Método por Intercalação: MergeSort()
Dividir e Conquistar
Consiste em dividir um problema grande e único em subproblemas menores, resolver os
subproblemas menores e combinar suas soluções para encontrar a solução para o grande
problema original.
Desta forma fica mais fácil resolver todo o problema.
O conceito Dividir e Conquistar envolve três passos:
1. Dividir o problema em múltiplos problemas menores. 
2. Conquistar o subproblema por ordená-lo. A ideia é quebrar o problema em subproblemas
atômicos, onde eles são solúveis.
3. Combinar as soluções dos subproblemas para encontrar a solução do problema atual. 
Dividir e Conquistar
MergeSort, dividir para conquistar
Implementação do 
Mergesort
/* a[] é o vetor
p é o índice inicial, 0
r é o último índice do vetor. 
*/
#include 
// Entrada sugerida a[5] = {32, 45, 67, 2, 7} como vetor a ser ordenado.
// função mergeSort
void mergeSort(int a[], int p, int r){
int q;
if(pO método SelectionSort não modularizarizado
	Slide 39: Método da Seleção em Árvore: HeapSort
	Slide 40: O que é um Heap?
	Slide 41: Min-Heap e Max-Heap
	Slide 42: Heap máximo (Max-Heap)
	Slide 43: Heap mínimo (Min-heap)
	Slide 44: Heap máximo visto como uma Árvore Binária
	Slide 45: Heap máximo visto como uma Árvore Binária
	Slide 46: Enxergando a árvore binária dentro de um vetor
	Slide 47: Enxergando a árvore binária dentro de um vetor
	Slide 48: Entendendo o funcionamento do HeapSort
	Slide 49: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 50: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 51: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 52: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 53: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 54: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 55: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 56: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 57: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 58: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 59: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 60: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 61: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 62: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 63: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 64: Entendendo o funcionamento do HeapSort 1a. Iteração: criar o heap 
	Slide 65: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 66: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 67: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 68: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 69: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 70: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 71: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 72: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 73: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 74: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 75: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 76: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 77: Entendendo o funcionamento do HeapSort 2a. Iteração: criar o heap 
	Slide 78: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 79: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 80: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 81: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 82: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 83: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 84: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 85: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 86: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 87: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 88: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 89: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 90: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 91: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 92: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 93: Entendendo o funcionamento do HeapSort 3a. Iteração: criar o heap 
	Slide 94: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 95: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 96: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 97: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 98: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 99: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 100: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 101: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 102: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 103: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 104: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 105: Entendendo o funcionamento do HeapSort 4a. Iteração: criar o heap 
	Slide 106: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 107: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 108: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 109: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 110: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 111: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 112: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 113: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 114: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 115: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 116: Entendendo o funcionamento do HeapSort 5a. Iteração: criar o heap 
	Slide 117: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 118: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 119: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 120: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 121: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 122: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 123: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 124: Entendendo o funcionamento do HeapSort 6a. Iteração: criar o heap 
	Slide 125: Entendendo o funcionamento do HeapSort 7a. Iteração: criar o heap 
	Slide 126: Entendendo o funcionamento do HeapSort 7a. Iteração: criar o heap 
	Slide 127: Entendendo o funcionamento do HeapSort 7a. Iteração: criar o heap 
	Slide 128: Entendendo o funcionamento do HeapSort 7a. Iteração: criar o heap 
	Slide 129: Entendendo o funcionamento do HeapSort 7a. Iteração: criar o heap 
	Slide 130: Implementando o HeapSort parte #1
	Slide 131: Implementando o HeapSort parte #1
	Slide 132
	Slide 133
	Slide 134: Análise de Complexidade do algoritmo de Ordenação pelo Método da Seleção em Árvore: HeapSort
	Slide 135: Análise de Complexidade do algoritmo de Ordenação pelo Método da Seleção em Árvore: HeapSort
	Slide 136: Conclusão da Análise de Complexidade do algoritmo de Ordenação pelo Método da Seleção em Árvore: HeapSort
	Slide 137
	Slide 138: Métodos de Ordenação por Inserção
	Slide 139: InsertionSort
	Slide 140: InsertionSort
	Slide 141: InsertionSort Método de ordenação por inserção direta
	Slide 142
	Slide 143: Método de Ordenação por Inserção Direta: InsertionSort
	Slide 144: Método de Ordenação por Inserção Direta: InsertionSort
	Slide 145: Método de Ordenação por Inserção Direta: InsertionSort
	Slide 146: BinaryInsertionSort
	Slide 147: Método de Ordenação por Inserção Direta Binária: BinaryInsertionSort
	Slide 148: Algoritmo BinaryInsertionSort
	Slide 149: Análise de Complexidade do algoritmo de Ordenação por Inserção Direta Binária: BinaryInsertionSort
	Slide 150: Outros métodos
	Slide 151: Método por Intercalação: MergeSort()
	Slide 152: Dividir e ConquistarSlide 153: Dividir e Conquistar
	Slide 154: MergeSort, dividir para conquistar
	Slide 155: Implementação do Mergesort
	Slide 156: Implementação do MergeSort
	Slide 157: Análise de Complexidade do algoritmo de Ordenação por Intercalação: Mergesort
	Slide 158: Outra Implementação do MergeSort
	Slide 159
	Slide 160: Método de Ordenação por Intercalação: MergeSort
	Slide 161: Bibliografias
	Slide 162: Vídeos que ilustram o funcionamento dos algoritmos de ordenação

Mais conteúdos dessa disciplina