Professional Documents
Culture Documents
Pesquisa Seqencial
Cont.
// programa utilizando busca void main(void) { int achou; char matriz[5] = {a, u,l,a,\0};
achou = busca(matriz, 5, l); if (achou) { printf (O %c o %d elemento da lista, matriz[achou-1], achou); } else { printf (No foi encontrado o elemento procurado); }
}
Pesquisa Sequencial
Gasta-se em mdia n/2 comparaes para encontrar um elemento particular em um vetor contendo n elemento.
O pior caso requer n comparaes. Mtodo muito pouco eficiente
Pesquisa Binria
a forma mais eficiente de encontrar uma informao em uma matriz, mas requer que a matriz esteja ordenada. O mtodo utiliza a abordagem dividir e conquistar
Formulao do algoritmo geral:
1.
2. 3.
1. 2.
Repetir at o passo 3 enquanto o intervalo de pesquisa no ficar vazio. Obter a posio do elemento central no intervalo atual de pesquisa Se o valor do elemento desejado igual ao do elemento central, ento a pesquisa bem sucedida.
Se o valor do elemento desejado menor do que o valor do elemento central, ento reduza o intervalo de pesquisa primeira metade do intervalo anterior; caso contrario reduza o intervalo de pesquisa a segunda metade do intervalo anterior
4.
Pesquisa malsucedida.
{
else { }
ini = meio + 1;
return (meio);
}
}
return 1;
achou = busca_binaria(matriz, 5, 'd'); if (achou) { printf ("O %c o %d elemento da lista\n", matriz[achou], achou+1); } else { printf ("No foi encontrado o elemento procurado"); }
}
Ordenao de Vetores
Em cada passo, iniciando se com o segundo elemento, i=1, e incrementando-se i de uma em uma unidade, o i-simo elemento da seqncia vai sendo retirado e transferido para a seqncia destino, e inserido na posio apropriada
Para i=1 ate n-1 faa
x <- a[i] Inserir x no local adequado em a0 ... ai
Por exemplo, para a matriz dcab Inicial Passo 1 Passo 2 Passo 3 dcab cdab acdb abcd
Fim-para
Em C
#include <stdio.h> #include <string.h> // Ordenao por insero void ordena(char *item, int count) { int a, b; char t; for (a=1; a<count; a++) // Para o vetor inteiro { t= item[a]; // t o elemento que vai ser posicionado for(b=a-1; b>=0 && t< item[b]; b--) { item[b+1] = item[b]; } item[b+1] = t; } }
void main() { char pal[200]; printf ("\ndigite uma palavra: "); gets (pal); ordena(pal, strlen(pal)); printf ("\n%s ",pal); }
nmero de comparaes que ocorrem durante a ordenao depende de como a lista est inicialmente ordenada.
Lista
Ordenada N de comparaes = n-1 Lista Fora de Ordem N de comparaes = (n2 + n) Caso mdio (n2 + n)
Lgica da ordenao:
Selecionar o elemento que apresenta a chave de menor valor Troc-lo com o primeiro elemento da seqncia a0. Repetir estas operaes envolvendo agora apenas os n-1 elementos restantes depois dos n-2 elementos, etc., at restar s um elemento, o maior deles.
Algoritmo
Exemplo: matriz bdac Inicial Passo 1 Passo 2 Passo 3 bdac adbc abdc abcd
Para i=0 at n-2 faa Guarda o ndice do menor elemento de a0 ... an em k; Trocar a0 com ak Fim-para
Em C
void ordenaS (char *item, int count) { int a,b,c; int troca; char t; for (a=0; a<count-1; a++) { troca = 0; c = a; t = item[a]; for (b=a+1; b<count; b++) { if (item[b] < t) { c = b; t = item [b]; troca = 1; } } if (troca) { item[c] = item[a]; item[a] = t; } }
}
A principal caracterstica do processo de ordenao por troca a troca entre dois elementos do vetor. Mtodo Bolha (bubblesort) No mtodo bolha efetua-se varreduras repetidas sobre o vetor, deslocando a cada passo, para a sua extremidade esquerda, o menor dos elementos do conjunto que restou
Algoritmo
Para i=1 ate n faa // incrementando de 1 Para j=n ate i faa // decrementando de 1 Se a[j-1] > a[j] ento x = a[j-1] a[j-1] = a[ j ] a[ j ] = x fim-se fim-para fim-para
Exemplo: matriz bdac Inicial Passo 1 Passo 2 Passo 3 dcab adcb abdc abcd
Exemplo
Ordenar a palavra: CAFETBZ
CAFETBZ CAFEBTZ CAFBETZ CABFETZ
ACBFETZ
ACBEFTZ ABCEFTZ
Este algoritmo sugere alguns aperfeioamentos. Uma tcnica bvia para melhorar consiste em manter uma indicao informando se houve ou no a ocorrncia de uma troca, para determinar precocemente o termino do algoritmo. Outra melhoria seria, no apenas guardar a informao da ocorrncia de troca, mas a posio da ltima permuta realizada.
Seleciona-se um elemento chamado comparando Faz se a partio da matriz em duas sees: uma com os elementos menores que o comparando e uma com os elementos maiores ou iguais que o comparando. Repete-se este processo para cada seo at que a matriz esteja ordenada.
O processo essencialmente recursivo por natureza, de modo que a forma mais clara de implementar o algoritmo atravs de algoritmos recursivos.
Em C (Quicksort)
void quick(char *item, int count) { qs(item, 0, count-1); }