Alternativa A
A pesquisa binária depende estritamente da condição de parada do loop para garantir que todos os elementos do array sejam verificados.
Análise Detalhada
1. Diferença entre as condições:
- Original (
low <= high): O loop continua executando mesmo quando low é igual a high. Isso garante que, se restar apenas um elemento no intervalo de busca, ele será verificado. - Alterada (
low < high): O loop encerra assim que low se torna igual a high. Isso significa que o último elemento restante no intervalo nunca é verificado dentro do loop.
2. Simulação com o valor 4 (Opção A):
Vamos rastrear o algoritmo com a condição alterada while (low < high) buscando o valor 4 na lista [4, 7, 9, 11, 20, 24, 30, 41].
| Iteração | low | high | mid (índice) | a[mid] | Ação |
|---|
| Início | 0 | 7 | 3 | 11 | 4 < 11 \Rightarrow high = 2 |
| 2ª | 0 | 2 | 1 | 7 | 4 < 7 \Rightarrow high = 0 |
| 3ª | 0 | 0 | - | - | Condição 0 < 0 é Falsa. Loop para. |
No final da segunda iteração, o intervalo de busca reduziu-se a apenas o índice 0 (valor 4). Como a condição agora é low < high, quando ambos são 0, o loop termina antes de verificar se a[0] é igual à chave procurada. O método retorna -1 (não encontrado).
3. Por que os outros valores funcionam?
Para os outros valores listados (7, 11, 24, 30), o algoritmo consegue encontrar a chave antes que o intervalo de busca se reduza a um único elemento. O problema ocorre especificamente quando o alvo é o último elemento remanescente da sublista atual, pois ele nunca é conferido.
Portanto, o valor que não será encontrado é o 4.