Exemplo de vetor ordenado: vetor[10] = {0,1,2,3,4,5,6,7,8,9};
A busca binária localiza o meio do vetor com a fórmula (Inicio + Fim) / 2, sendo Inicio a primeira posição do vetor e Fim a ultima posição do vetor. Levando em consideração o exemplo vetor[10] teríamos: (1+10) /2 = 5,5. Em C este valor seria passado para 5, pois ao armazena-lo como inteiro (int) as casas decimais são ignoradas.
Tendo em mãos o meio (5) do vetor ordenado o algoritmo verifica se o valor procurando é ele, se não for ele verificará se é maior ou menor que ele. Sendo maior, a busca será feita apenas na parte direita da metade, se menor, a busca será realizada na parte da esquerda:
#define TAM 10
//BUSCA BINÁRIA
int buscaBinaria(int vetor[], int tamanho, int valor)
{
int meio, i, ini = 0, fim = tamanho-1;
while(ini <= fim)
{
meio = (ini + fim) / 2; //encontrando o meio do vetor
if(valor == vetor[meio]) //valor encontrado?
return meio; //retorna posição do valor encontrado
else if(valor < vetor[meio])
fim = meio - 1;
else
ini = meio + 1;
}
return -1; //valor não enconrado
}
int main(int argc, char *argv[])
{
int v[TAM] = {0,1,2,3,4,5,6,7,8,9}, i, indice;
indice = buscaBinaria(v, TAM, 8);
printf("\nO valor procurado esta na posicao %d", indice);
getch();
return 0;
}
Veja também o artigo sobre Busca linear ou busca sequencial.

Nenhum comentário:
Postar um comentário