Numexa logoNumexa

Busca Binária Passo a Passo

Veja o intervalo de busca cair pela metade a cada comparação.

Dica: clique em um número do vetor para procurá-lo.

Passo 1 de 4 · início = 0 · fim = 30 · meio = 15

v[15] = 48 é maior que 42: descarta a metade direita.

Busca binária

4 comparações

Busca linear

14 comparações

A busca binária (ou pesquisa binária) encontra um valor em um vetor ordenado descartando metade dos elementos a cada comparação. A animação mostra os índices de início, fim e meio em cada passo e compara com o número de comparações da busca linear.

Busca Binária em C

int busca_binaria(int v[], int n, int alvo) {
    int inicio = 0, fim = n - 1;
    while (inicio <= fim) {
        int meio = inicio + (fim - inicio) / 2;
        if (v[meio] == alvo) return meio;
        if (v[meio] < alvo) inicio = meio + 1;
        else fim = meio - 1;
    }
    return -1; /* não encontrado */
}

Busca Binária em Python

def busca_binaria(v, alvo):
    inicio, fim = 0, len(v) - 1
    while inicio <= fim:
        meio = (inicio + fim) // 2
        if v[meio] == alvo:
            return meio
        if v[meio] < alvo:
            inicio = meio + 1
        else:
            fim = meio - 1
    return -1

# Na biblioteca padrão:
import bisect
bisect.bisect_left(v, alvo)

Busca Binária em Java

static int buscaBinaria(int[] v, int alvo) {
    int inicio = 0, fim = v.length - 1;
    while (inicio <= fim) {
        int meio = inicio + (fim - inicio) / 2;
        if (v[meio] == alvo) return meio;
        if (v[meio] < alvo) inicio = meio + 1;
        else fim = meio - 1;
    }
    return -1;
}
// ou: Arrays.binarySearch(v, alvo);

Versão Recursiva

def busca(v, alvo, inicio, fim):
    if inicio > fim:
        return -1
    meio = (inicio + fim) // 2
    if v[meio] == alvo:
        return meio
    if v[meio] < alvo:
        return busca(v, alvo, meio + 1, fim)
    return busca(v, alvo, inicio, meio - 1)

Perguntas Frequentes

Como funciona a busca binária?

Em um vetor ordenado, compare o elemento do meio com o valor procurado. Se for igual, achou. Se o procurado for maior, descarte a metade esquerda; se for menor, descarte a direita. Repita na metade que sobrou até achar ou o intervalo ficar vazio.

Qual a complexidade da busca binária?

O(log n). A cada comparação o intervalo cai pela metade, então um vetor de 1 milhão de elementos precisa de no máximo 20 comparações, e um de 1 bilhão, no máximo 30. A busca linear precisaria de até n comparações.

A busca binária funciona em vetor desordenado?

Não. Ela depende de o vetor estar ordenado para saber qual metade descartar. Se a lista não está ordenada, é preciso ordenar antes (O(n log n)) ou usar busca linear.

Qual o bug clássico da busca binária?

Calcular o meio como (inicio + fim) / 2 pode estourar o limite de inteiros em C e Java quando os índices são muito grandes. A forma segura é inicio + (fim − inicio) / 2. Esse bug ficou anos na biblioteca padrão do Java até ser corrigido em 2006.

Ferramentas Relacionadas