Escolar Documentos
Profissional Documentos
Cultura Documentos
Bubble Sort
Bubble Sort
Trocas
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 12
Anlise do BubbleSort
Quanto tempo a ordenao por bolha demora para
executar? Em outras palavras, quantas vezes as
operaes de comparao e de troca de posio de
elementos so executadas?
No melhor caso, nenhuma troca ser realizada.
(Cite um exemplo para este melhor caso)
Em ambos os casos, BubbleSort faz da ordem de N
2
comparaes, apenas BubbleSort2 faz N-1
comparaes no melhor caso.
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 13
Ordenao por Seleo (Selection Sort)
A ordenao por seleo (SelectionSort)
consiste, em cada etapa, em selecionar o menor
(ou o maior) elemento e aloc-lo em sua posio
correta dentro do futor vetor ordenado.
Tambm realiza N-1 passos, mas em cada passo
apenas uma troca efetuada. Essa troca garante
que um elemento est na sua posio final no
vetor ordenado.
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 14
Ordenao por Seleo
Etapa V[0] V[1] V[2] V[3] Troca
1 10 9 7 6 V[0] e V[3]
2 6 9 7 10 V[1] e V[2]
3 6 7 9 10 Fim
na ordenao por seleo a lista com m registros fica
decomposta em dois subvetores, uma contendo os
elementos j ordenados e a outra com os restantes ainda
no ordenados.
No incio o subvetor ordenado vazia e a outra contm
todos os demais. No final do processo o vetor ordenado
apresentar n ~ 1elementos e o outro apenas 1
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 15
SelectionSort
void SelectionSort(int vetor[], int n) {
int i,j,i_menor,min;
for(i=0;i<n-1;i++) {
i_menor = i;
for(j=i+1;j<n;j++)
if(vetor[j] < vetor[i_menor])
i_menor = j;
min = vetor[i_menor];
vetor[i_menor] = vetor[i];
vetor[i] = min;
}
}
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 16
Ordenao por nsero
A ordenao por insero (nsertionSort) baseia-se na
idia de semi-ordem, i.e, mais simples organizar
algo que j est arrumado do que ordenar uma
grande baguna.
Considerando isso, divide-se o vetor em dois grupos
de elementos: os ordenados, no incio do vetor, e os
no ordenados no final. Em N-1 passos,
selecionamos cada elemento do grupo no ordenado
par ser inserido no grupo ordenado.
Semelhante ao que fazemos para manter ordenadas
as cartas de baralho nas mos.
Insertion Sort
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 26
Ordenao por nsero
No incio, o subvetor ordenado formado trivialmente
apenas pelo primeiro elemento da lista.
A cada etapa i , o i -simo elemento inserido em
seu lugar apropriado entre os i ~ 1 elementos j
ordenados. Os ndices dos itens a serem inseridos
variam de 2 a tamanho.
Etapa V[0] V[1] V[2] V[3]
1 10 9 7 6
2 9 10 7 6
3 7 9 10 6
4 9 7 6 10
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 27
nsertionSort
void InsertionSort(int vetor[], int n) {
int i,j,chave;
for(i=1;i<n;i++) {
chave = vetor[i];
j=i-1;
while ((j >= 0) && (vetor[j]>chave)) {
vetor[j+1] = vetor[j];
j--;
}
vetor[j+1] = chave;
}
}
2o. Sem 2007 Algoritmos e Programao de Computadores - Turmas I J K L 28
Anlise do nsertion Sort
Quanto tempo a ordenao por insero demora para
executar? Em outras palavras, quantas vezes as
operaes de comparao e de troca de posio de
elementos so executadas?
No pior caso, se assemelha ao BubbleSort, onde so
realizadas aproximadamente N
2
trocas.
No melhor caso, nenhuma troca realizada.
No melhor caso, nsertionSort faz da ordem de N
comparaes. J no pior caso so N
2
comparaes.
Na mdia, tem meIhor desempenho em
reIao ao BubbIeSort e ao SeIectionSort
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 29
Busca de valores
Dado um conjunto de valores, como podemos
verificar se um determinado valor est presente neste
conjunto e, caso esteja, qual a sua posio no
conjunto?
Por exemplo:
Encontre o RA 070102 em um vetor de RA dos
alunos de uma determinada turma
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 30
Busca Linear
Uma forma simples de pesquisar elementos em
um conjunto de valores (por exemplo, um vetor)
comparar cada elemento com o valor de pesquisa,
caracterizando uma busca seqenciaI ou
tambm chamada busca Iinear (LinearSearch).
Dado um vetor de N elementos e um valor de
pesquisa x, encontrar a posio de x no vetor
Para i = 1 at N
Se vetor[i] = x
retorna i
retorna -1
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 31
Busca Linear
O valor de pesquisa
sempre
comparado com
uma posio
especfica do vetor,
de forma linear, at
que o elemento
seja encontrado ou
todos os elementos
do vetor tenham
sido comparados.
8 2 3 7 9 1 4 6
8 2 3 7 9 1 4 6
8 2 3 7 9 1 4 6
8 2 3 7 9 1 4 6
8 2 3 7 9 1 4 6
8 2 3 7 9 1 4 6
3
3
3
3
3
3
Valor Vetor
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 32
Busca Linear
int LinSearch(int vetor[], int n, int x) {
int i;
for(i=0;i<n;i++) {
if(vetor[i] == x) {
return i;
}
}
return -1;
}
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 33
Anlise da Busca Linear
Quantas vezes as operaes de comparao de
elementos so executadas?
No pior caso, N comparaes sero executadas.
(D um exemplo para o pior caso)
No melhor caso, apenas uma comparao ser
executada.
(D um exemplo para o melhor caso)
Em geral, podemos dizer que a busca linear realiza em torno
de N comparaes. Se cada elemento do vetor tiver que ser
pesquisado (lista de chamada), sero executadas na ordem
de N
2
comparaes.
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 34
Busca Binria
Para reduzir o nmero de comparaes em uma
pesquisa de um elemento em um vetor, podemos
pensar em utilizar um vetor ordenado e realizar uma
busca mais inteligente.
A busca binria utiliza a tcnica de diviso e conquista,
da sequinte forma:
1 Divide-se o vetor em 2 partes, com um elemento piv entre essas
partes (o elemento do meio).
2 Se o valor de busca for igual ao piv ento o valor foi encontrado
Seno, se o valor de busca for inferior ao piv, repete-se a busca
agora para o subvetor inferior ao piv.
Seno, repete-se a busca para o subvetor superior ao piv.
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 35
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
8 2 1 3 4 6 5 7 10 9 11 12 14 13 0
64 14 13 25 33 51 43 53 84 72 93 95 97 96 6
ini fim
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 36
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
8 2 1 3 4 6 5 7 10 9 11 12 14 13 0
64 14 13 25 33 51 43 53 84 72 93 95 97 96 6
ini fim meio
53
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 37
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
2 1 3 4 6 5 0
14 13 25 33 51 43 6
ini
8 7 10 9 11 12 14 13
64 53 84 72 93 95 97 96
fim
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 38
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
2 1 3 4 6 5 0
14 13 25 33 51 43 6
ini
8 7 10 9 11 12 14 13
64 53 84 72 93 95 97 96
fim meio
25
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 39
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
4 6 5
33 51 43
ini
8 7 10 9 11 12 14 13
64 53 84 72 93 95 97 96
fim
2 1 3 0
14 13 25 6
meio
43
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 40
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
4
33
ini
8 7 10 9 11 12 14 13
64 53 84 72 93 95 97 96
fim
2 1 3 0
14 13 25 6
6 5
51 43
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 41
Busca Binria
Entrada:
Vetor Ordenado e Valor x (neste caso, 33)
AIgoritmo
Enquanto (ini <= fim)
meio = (fim + ini) / 2
Se vetor[meio] = x
retorna meio
seno, se x < vetor[meio]
fim = meio-1
seno
ini = meio+1
retorna -1
4
33
ini
8 7 10 9 11 12 14 13
64 53 84 72 93 95 97 96
fim
2 1 3 0
14 13 25 6
6 5
51 43 33
meio
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 42
Busca Binria
int BinSearch(int vetor[], int n, int x) {
int ini, meio, fim;
ini = 0;
fim = n-1;
while (ini <= fim) {
meio = (fim + ini)/2;
if (vetor[meio]==x)
return meio;
else if (x < vetor[meio])
fim = meio - 1;
else
ini = meio + 1;
}
return -1;
}
11-Mai-2007 Algoritmos e Programao de Computadores - Nielsen Simes 43
Anlise da Busca Binria
Quantas vezes as operaes de comparao de elementos
so executadas?
No pior caso, Iog
2
N comparaes sero executadas.
(D um exemplo para o pior caso)
No melhor caso, apenas uma comparao ser executada.
(D um exemplo para o melhor caso)
Busca binria realiza, em geral, menos de Iog
2
N comparaes.
Se cada elemento do vetor tiver que ser pesquisado (lista de
chamada), sero executadas na ordem de N * Iog
2
N
comparaes, bem inferior Busca Linear.