Camada Zero · 02 · Busca Binária

Ordenar um array custa caro. Vale a pena? Vale quando você vai buscar nele muitas vezes, porque ordenado ele desbloqueia O(log n). Roda a linear e a binária no mesmo array aqui embaixo e compara o número de comparações. A linear varre tudo. A binária corta o problema no meio a cada passo.
0Comparações
Linear faria (pior caso)
Binária faz (pior caso ⌊log₂n⌋+1)
Escolhe um alvo e roda. Dica: testa um número que não existe no array e olha a binária provar a ausência em pouquíssimos passos.
candidatos meio / olhando agora eliminado encontrado
A binária só funciona em dados ordenados. É a razão de ordenar (Aula 01) ser um investimento: você paga O(n log n) uma vez e todas as buscas seguintes viram O(log n) em vez de O(n). Num array de 1 milhão: linear olha até 1.000.000 itens; binária, no máximo 20.

Busca Binária em Go

func binarySearch(a []int, target int) int {
    lo, hi := 0, len(a)-1
    for lo <= hi {
        mid := lo + (hi-lo)/2 // evita overflow
        switch {
        case a[mid] == target:
            return mid
        case a[mid] < target:
            lo = mid + 1
        default:
            hi = mid - 1
        }
    }
    return -1 // não encontrado
}

Na prática (stdlib)

// sort.SearchInts já faz isso, otimizado:
i := sort.SearchInts(a, target)
if i < len(a) && a[i] == target {
    // achou em i
}

🧠 Desafio — Busca Binária

Roda a binária e a linear aqui de cima antes de responder. As duas últimas são de reflexão: escreve a sua e só então revela o modelo.