Buscar

ATP-Aula05-AplicaçõesDeVetores(Ordenação)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e Técnicas de 
Programação
Aula 05: Estruturas de Dados Seqüenciais
(Aplicações de Vetores – Ordenação)
Plano de Aula
� Ordenação – Introdução
� Ordenação pelo Método da Bolha (BubbleSort)
� Ordenação pelo Método da Seleção
Introdução
� Ordenar corresponde ao processo de organizar um 
conjunto de objetos segundo uma dada ordem.
� Exemplo1: Um conjunto de pessoas pode ser organizado 
por nomes, datas de nascimento, CPFs etc.
� O objetivo da ordenação é facilitar a localização dos 
objetos:
� Exemplo: organizar um conjunto de livros para permitir 
consultas aos seus conteúdos.
� Contra-exemplo: faz pouco sentido organizar o mesmo 
conjunto de livros para reciclar suas folhas.
� Mais exemplos: lista telefônica, dicionários, índices 
remissivos de livros, lista de matriculados etc.
Introdução
� O processo de ordenação envolve executar “muitas”
vezes duas operações:
� Comparação: indica se dois elementos estão em ordem
� Troca: permuta dois elementos, o que requer três
Movimentos (atribuições) na memória.
� A eficiência de uma algoritmo de ordenação é medida 
através do número de comparações e de movimentos
(atribuições) de elementos que ele realiza, conforme o 
número o número de elementos, N.
Introdução
� Conforme a eficiência, os algoritmos de ordenação 
de vetores são classificados em:
� Algoritmos diretos: são simples, fáceis de entender e 
programar, mas devem usados em conjuntos “pequenos”:
� Bolha
� Seleção direta
� Inserção direta
� Métodos eficientes: têm detalhes mais complexos, são 
mais difíceis de entender e programar, porém são muito 
eficientes para valores de N “grandes”:
� QuickSort, HeapSort, Heapsort
� (Aguardem a Disciplina Estruturas de Dados I)
Método da Bolha
� Dado um vetor V contendo N elementos, o método 
trabalha assim:
� Na primeira “rodada”, faz N-1 comparações entre 
elementos adjacentes (Vi e Vi+1), trocando-os de 
ordem sempre que Vi > Vi+1. Isso fará com que o 
maior elemento fique na última posição, portanto no 
seu local correto.
� Na segunda rodada, faz o mesmo, porém agora 
sobre os N-1 elementos restantes. Ao final, o maior 
elemento deste conjunto ficará na penúltima 
posição.
Método da Bolha
� Na rodada N-1, restam apenas dois elementos não 
ordenados e basta uma comparação (e uma troca, se 
necessário) para colocá-los em ordem.
� O método tem esse nome porque se consideramos o 
vetor na vertical (de baixo para cima) e cada elemento 
como uma bolha de diâmetro proporcional ao seu valor, 
teríamos as bolhas maiores subindo.
40
36
28
40
36
28 40
36
28
40
36
281
2
3
Algoritmo – Método da Bolha
//A = A[1], A[2],..., A[n]
procedimento MetodoBolha(PorRef A : Vetor; n : inteiro)
declare
i, j : inteiro
inicio
para i ← n até↓ 2 faça
para j ← 1 até i-1 faça
se A[j] > A[j+1] então
Troca(A[i], A[j])
fimse
fimpara
fimpara
fim
Ordenação por Seleção
� Também é muito simples e faz significativamente
menos trocas que o método da bolha.
� Princípio para ordenar A com N elementos:
� Dentre os N elementos, seleciona o de menor valor e 
troca-o com aquele da 1ª posição.
� Dentre os N-1 restantes, selecione o de menor valor e 
troque-o com aquele na 2ª posição.
� Repita a operação até que só reste um elemento não 
ordenado, o qual será o maior valor e já estará na 
última posição
Algoritmo – Método da Seleção
//A = A[1], A[2],..., A[n]
procedimento MetodoSeleção(PorRef A: Vetor; n: inteiro)
declare
i, j, Min : inteiro
inicio
para i ← 1 até n-1 faça
Min ← i
para j ← i+1 até n faça
se A[j] < A[Min] então
Min ← j
fimse
fimpara
Troca(A[Min], A[i]) //Coloca o mínimo na sua posição
fimpara
fim
Exercício 1
� Implementar em C o algoritmo de ordenação 
por Seleção
Solução 1:
void MetodoSelecao(int v[], int n){
int i, j, Min;
for (i=0; i < n-1; i++){
Min = i;
for (j=i+1; j < n; j++)
if (v[j] < v[Min])
Min = j;
TrocaElementos(v, n, Min, i);
}
}
Exercício 2
� Um determinada aplicação requer o 
processamento dos 10 menores valores 
inteiros de um conjunto que contém bem 
mais que 10 valores. Modifique o método da 
seleção para que ele selecione os 10 
menores valores, sem ordenar todo o 
conjunto.
Solução 2:
void DezMaiores(int v[], int n){
int i, j, Min;
for (i=0; i < 10; i++){
Min = i;
for (j=i+1; j < n; j++)
if (v[j] < v[Min])
Min = j; 
TrocaElementos(v, n, Min, i);
}
}
Exercício 3
� Implemente uma função em C que funda 2 
vetores de inteiros ordenados a e b, 
contendo na e nb elementos, em um vetor c, 
o qual também deverá estar ordenado. 
Admita que c tenha capacidade (na+nb) 
sufuciente!
� Exemplo: 
� a = [12, 25, 48, 54]
� b = [17, 22, 25, 31]
� c = a + b = [12, 17, 22, 25, 25, 31, 48, 54]
Solução 3
//funde os vetores ordenados "a" e "b" em "c", 
//de modo que "c" também seja ordenado
void funde(int a[], int na, int b[], int nb, int c[], int * nc)
{
int i = 0, j = 0, k = 0;
while (i < na && j < nb)
{ if (a[i] <= b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
}
while (i < na)
c[k++] = a[i++];
while (j < nb)
c[k++] = b[j++];
*nc = k;
}

Outros materiais