Você está aqui: C++ ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Como usar a busca binária em C++ - Pesquisa binária na linguagem C++Quantidade de visualizações: 1123 vezes |
|
A busca binária, ou pesquisa binária, é um algoritmo eficiente para encontrar um item em uma lista (vetor ou array) ordenada. Sim, os itens devem, obrigatoriamente, estar ordenados. O processo é bem simples. A busca binária começa a partir do meio da lista e compara o item nesta posição com o valor sendo pesquisado. Se o valor não for encontrado e for menor que o item no meio da lista, o algoritmo passa para a porção à esquerda da lista, eliminando, assim, metade dos elementos do vetor ou array (a porção maior que o valor pesquisado). Se o valor não for encontrado e for maior que o item no meio da lista, então a busca reinicia a partir da metade da sub-lista à direita (os itens maiores que o valor pesquisado). Essa divisão continua até que o valor seja encontrado ou não seja mais possível dividir a lista pela metade. Se um array ou vetor possuir 100 elementos e usarmos a busca binária nele, precisaremos efetuar no máximo 7 tentativas para encontrar o valor desejado. Se a lista possuir 4 bilhões de itens nós teremos que fazer no máximo 32 tentativas. Isso acontece porque a pesquisa binária é executada em tempo logarítmico, ou seja, log2 n, onde n é a quantidade de itens no vetor. Dessa forma, se tivemos 1.000 itens em um array, log2 1000 = 10 tentativas. Lembre-se de que, na programação log e log2 retornam resultados diferentes: log(10) = 2.302585092994046 enquanto log2(10) = 3.321928094887362. Na análise da busca binária nós usamos sempre log2. Vamos agora ver como podemos codificar a busca binária em C++. Veja o código a seguir: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
#include <iostream>
// para anotarmos o tamanho do array
#define TAM_ARRAY 10
using namespace std;
// função principal do programa
int main(int argc, char *argv[]){
int numero, esquerda, direita, meio;
bool encontrado;
// vamos criar uma um vetor ordenado de inteiros
int valores[] = {3, 5, 7, 8, 9, 12, 43, 50, 52, 60};
// vamos mostrar os elementos do vetor
cout << "Os valores do array são: ";
for(int i = 0; i < TAM_ARRAY; i++){
cout << valores[i] << ", ";
}
// vamos pedir o item a ser pesquisado
cout << "\n\nInforme o número a ser pesquisado: ";
cin >> numero;
// agora vamos pesquisar o número no array usando a pesquisa
// binária
// a variável esquerda aponta para o primeiro elemento do vetor
esquerda = 0;
// a variável direita aponta para o último elemento do vetor
direita = TAM_ARRAY - 1;
// para indicar se o valor foi encontrado
encontrado = false;
// enquanto houver mais de um elemento a ser comparado
while (esquerda <= direita){
// obtemos o elemento na metade da lista
meio = (esquerda + direita) / 2;
// fazemos a comparação
if (numero == valores[meio]){
cout << "O número foi encontrado no índice " << meio << endl;
encontrado = 1;
break; // sai do laço
}
// o item atual é maior que o valor pesquisado?
if (valores[meio] > numero){
direita = meio - 1;
}
// o item atual é menor que o valor pesquisado?
else{
esquerda = meio + 1;
}
}
// o valor foi encontrado?
if (!encontrado){
cout << "O valor pesquisado não foi encontrado" << endl;
}
cout << "\n" << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
Ao executar este código C++ nós teremos o seguinte resultado: Os valores da lista são: [3, 5, 7, 8, 9, 12, 43, 50, 52, 60] Informe o número a ser pesquisado: 9 O número foi encontrado no índice 4 |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






