Pesquisa Binária
Este método de pesquisa é muito mais rápido que a pesquisa sequencial, e usa como base que o vetor já está ordenado:
Dado um vetor:
Encontra a posição referente ao meio do vetor, e verifica se o valor procurado é o elemento do meio do vetor. Se encontrou o valor:
- imprime uma mensagem de confirmação. Se não encontrou o valor:
- Se o valor procurado é menor que o valor que está no meio do vetor, a posição final do vetor será uma posição antes do meio do vetor.
- Se o valor procurado é maior que o valor que está no meio do vetor, a posição inicial do vetor será uma posição depois do meio do vetor.
- Volta para o passo 1.
Procurando o valor 4 dentro do vetor
- O valor da posição inicial é 0 (zero).
- O valor da posição final é 8.
- O valor da posição meio é 4. (A posição do meio é igual ao
(inicio + fim) / 2
)
Verifica se o valor do vetor que está na posição do meio é igual ao valor procurado, neste caso o valor do meio do vetor é 5 e estamos procurando o valor 4.
Como o valor que estamos procurando é menor que o valor que está no meio do vetor, então mudamos o valor da posição final para 3. O valor da posição inicial continua sendo 0 (zero). Agora o valor da posição meio muda 1.
Verifica novamente se o valor do vetor na posição do meio é igual ao valor procurado, neste caso o valor do meio do vetor é 1 e estamos procurando o valor 4.
Como o valor que estamos procurando é maior que o valor que está no meio do vetor, então mudamos o valor da posição inicial para 2. O valor da posição final continua sendo 3. Agora o valor da posição meio muda 2.
Verifica novamente se o valor do vetor na posição do meio é igual ao valor procurado, neste caso o valor do meio do vetor é 2 e estamos procurando o valor 4.
Como o valor que estamos procurando é maior que o valor que está no meio do vetor, então mudamos o valor da posição inicial para 3. O valor da posição final continua sendo 3. Agora o valor da posição meio muda 3.
Verifica novamente se o valor do vetor na posição do meio é igual ao valor procurado, neste caso o valor do meio do vetor é 4 e encontramos o valor que estávamos procurando.
Implementação do algoritmo de Pesquisa Binária
- Na linha 20, declaramos a assinatura do método que vai procurar por um número dentro de um vetor de números.
- Na linha 27, criamos um laço que será executado até encontrarmos o número procurado ou até a posição inicial ficar maior que a posição final (não encontrar o número dentro do vetor).
- Na linha 28, calculamos a posição meio do vetor.
- Na linha 32, verifica se o valor que tem no vetor na posição meio é igual ao valor do número procurado, se for igual, então imprimimos seu valor e paramos a pesquisa.
- Na linha 40, se não encontramos o valor, vamos diminuir o tamanho do vetor, para restringir o local onde pode estar o valor procurado.
- Se o valor do meio do vetor for menor que o valor procurado, significa que o valor que estamos procurando está entre a posição do
meio + 1
e ofim
do vetor. - Se o valor do meio do vetor for maior que o valor procurado, significa que o valor que estamos procurando está entre a posição
inicial
e omeio – 1
do vetor. - A linha 52 é executada apenas se não encontrou o número procurado dentro do vetor.
Pesquisa Binária utilizando objetos
Dado um vetor de pessoas, queremos pesquisar as pessoas que tem a inicial do nome entre ‘A’ e ‘F’.
Neste exemplo não vamos tratar mais de um nome com a mesma inicial e também não vamos tratar intervalos de letras que não tem nome, exemplo: ‘G’ a ‘H’.
Neste exemplo criamos algumas pessoas e colocamos elas dentro de um vetor, depois procuramos qual a posição do vetor está a pessoa com a letra ‘A’ e também procuramos a posição do vetor está a pessoa com a letra ‘F’. Depois imprimimos todas as pessoas que estão neste intervalo.
- Na linha 37, declaramos a assinatura do método que recebe uma letra e um vetor de pessoas.
- Na linha 50 verificamos se a primeira letra do nome da pessoa que está no meio do vetor é igual a letra procurada. Se encontrou o nome, então retorna a posição do vetor.
- Na linha 58, se não encontramos o nome com a letra inicial igual a letra procurada, vamos diminuir o tamanho do vetor, para restringir o local onde possa estar.
- Se a letra do nome do meio do vetor for menor que a letra procurada, significa que o nome com a letra que estamos procurando está entre a posição do
meio + 1
e o fim do vetor. - Se a letra do nome do meio do vetor for maior que a letra procurada, significa que o nome com a letra que estamos procurando está entre a posição inicial e o
meio – 1
do vetor. - A linha 57 é executada apenas se não encontrou o número procurado dentro do vetor, então retorna a posição que possui um caractere mais próximo do procurado.