Вы находитесь на странице: 1из 2

Faculdade Politcnica

SIN3A - Desenvolvimento de Algoritmos


Aula 04 Mtodos de Busca usando C/C++
Dado um conjunto de elementos, onde cada um identificado por uma chave, o objetivo da busca
localizar, nesse conjunto, o elemento que corresponde a uma chave especfica.
Exemplos:
Linear/Sequencial
Binrio

Mtodo Linear
Compara a chave com cada item do vetor, at encontrar um item de dado cujo valor igual o valor da
chave. Se encontrar retorna a posio do item, se no encontrar retorna -1.

Mtodo Binrio (Busca Binria)


A pesquisa ou busca binria (em ingls binary search algorithm ou binary chop) um algoritmo de busca
em vetores que segue o paradigma de diviso e conquista. Ela parte do pressuposto de que o vetor est
ordenado e realiza sucessivas divises do espao de busca comparando o elemento buscado (chave) com
o elemento no meio do vetor. Se o elemento do meio do vetor for a chave, a busca termina com sucesso.
Caso contrrio, se o elemento do meio vier antes do elemento buscado, ento a busca continua na
metade posterior do vetor. E finalmente, se o elemento do meio vier depois da chave, a busca continua
na metade anterior do vetor.
Algoritmo: se os dados estiverem ordenados em um arranjo, pode-se tirar vantagens dessa ordenao.

O elemento buscado comparado ao elemento do meio do arranjo;


Se igual, busca bem-sucedida, mas se:
o menor, repete-se a busca na primeira metade do vetor;
o maior, repete-se a busca na segunda metade do vetor

EXEMPLO: Busca Linear e Binria


#include <stdio.h>
#include <conio.h> // << getch();
int buscaLinear (int vet[], int tam, int chave);//Prottipo buscaLinear
int buscaBinaria(int vet[], int tam, int chave); // Prottipo buscaBinaria
int main(){
int vet[] = {10, 20, 30, 40, 50, 60, 70, 80, 90};
int ret = buscaLinear(vet, 9, 90);
int ret2 = buscaBinaria(vet, 9, 90);
printf("Linear: achou na posicao: %d \n", ret);

Joaquim Leonardo

Faculdade Politcnica
SIN3A - Desenvolvimento de Algoritmos
printf("Binaria: achou na posicao: %d \n", ret2);
getch(); //espera que o usurio clique no teclado
}
int buscaLinear(int vet[], int tam, int chave){
for(int i = 0; i < tam; i++){
if( chave == vet[i] ){
return i;
}
}
return -1;
}
int buscaBinaria( int vet[], int tam, int chave ) {
int esq, meio, dir;
esq = 0; dir = tam-1;
while (esq <= dir) {
meio = (esq + dir)/2;
if (vet[meio] == chave){
return meio;
}
if (vet[meio] < chave) {
esq = meio + 1;
}
else {
dir = meio - 1;
}
}
return -1;
}

Exerccios
1. Carregue um vetor com 10.000 inteiros aleatrios (entre 0 e 20.000) e verifique se o nmero
7.777 est contido nesse vetor. Utilize os algoritmos de Busca Linear e Binria para esse exerccio;
2. Calcule o tempo de execuo de cada algoritmos e informe qual o mais performtico;
//Para Calcular o tempo de execuo use o algoritmo abaixo
#include <stdio.h>
#include <time.h>
int main(){
clock_t tInicio, tFim, tDecorrido;
tInicio = clock();
/*seu codigo vem aqui*/
tFim = clock();
tDecorrido = ((tFim - tInicio) / (CLOCKS_PER_SEC / 1000));
printf("Tempo Decorrido: %d", tDecorrido);
}

3. Altere o algoritmo BuscaLinear para buscar em vetores de float;


4. Altere o algoritmo BuscaLinear para buscar em vetores de String.
Joaquim Leonardo

Вам также может понравиться