Pesquisa binária

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Pesquisa binária
classe Algoritmo de busca
estrutura de dados Array, Listas ligadas
complexidade caso médio
complexidade melhor caso
complexidade de espaços pior caso
otimo Sim
espaço
Algoritmos

A pesquisa ou busca binária (em inglês binary search algorithm ou binary chop) é um algoritmo de busca em vetores que segue o paradigma de divisão e conquista. Ela parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço 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 contrário, se o elemento do meio vier antes do elemento buscado, então 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.

Análise de Complexidade[editar | editar código-fonte]

A complexidade desse algoritmo é da ordem de Θ(log2 n), em que n é o tamanho do vetor de busca. Apresenta-se mais eficiente que a Busca linear cuja ordem é O(n).

Implementações[editar | editar código-fonte]

Pseudo-Código[editar | editar código-fonte]

Um pseudo-código recursivo para esse algoritmo, dados V o vetor com elementos comparáveis, n seu tamanho e e o elemento que se deseja encontrar:

BUSCA-BINÁRIA (V[], início, fim, e)
    i recebe o índice do meio entre início e fim
    se (v[i] = e) entao
        devolva o índice i   # elemento e encontrado
    fimse
    se (inicio = fim) entao
        não encontrou o elemento procurado
    senão
       se (V[i] vem antes de e) então
          faça a BUSCA-BINÁRIA(V, i+1, fim, e)
       senão
          faça a BUSCA-BINÁRIA(V, inicio, i-1, e)
       fimse
    fimse

Código em C[editar | editar código-fonte]

//Implementação Iterativa:

int PesquisaBinaria ( int vet[], int chave, int Tam)
{
     int inf = 0;     //Limite inferior  (o primeiro elemento do vetor em C é zero          )
     int sup = Tam-1; //Limite superior  (termina em um número a menos 0 a 9 são 10 numeros )
     int meio;
     while (inf <= sup)
     {
          meio = (inf + sup)/2;
          if (chave == vet[meio])
               return meio;
          if (chave < vet[meio])
               sup = meio-1;
          else
               inf = meio+1;
     }
     return -1;   // não encontrado
}

//Implementação Recursiva:

// x => chave | v[] => vetor ordenado | e => Limite inferior (esquerda) | d => Limite Superior (direita)
int PesquisaBinaria (int x, int v[], int e, int d)
{
 int i = (e + d)/2;
 if (v[i] == x)
    return i;
 if (e >= d)
    return -1; // Não foi encontrado
 else
     if (v[i] < x)
        return PesquisaBinaria(x, v, i+1, d);
     else
        return PesquisaBinaria(x, v, e, i-1);
}

Obs: A linguagem C fornece a função bsearch[1] na sua biblioteca padrão.

Referências

Ligações externas[editar | editar código-fonte]