bf0269714@gmail.com Posted November 24, 2022 Posted November 24, 2022 Estou utilizando este código para uma busca binária, porém ao compilar, não me retorna a resposta desejada, não encontrei o erro, poderiam me dar um help? Muito obrigada. #include<iostream> // p. usar cout cin #include<new> // p. alocação de memória #include<string> // trabalhar com textos #include<stdlib.h> // implementa funções p. diversas operaões #include<locale.h> #define TAM 10 using namespace std; // p. utilisar cout cin void imprimeVetor(int vetor[TAM]){ int cont; // auxiliar contador //Imprime o vetor: for (cont = 0; cont < TAM; cont ++){ cout << vetor[cont] << " - "; } } int buscaBinaria(int vetor[TAM], int valorProcurado, int *posicaoEncontrada){ int esquerda = 0; // limite da esquerda int direita = TAM -1; // limite da direita int meio; // O meio onde fica o cursor while(esquerda <= direita){ meio = (esquerda + direita)/2; //Quando o valor do meio é encontrado: if(valorProcurado == vetor[meio]){ *posicaoEncontrada = meio; return 1; }else if(valorProcurado < vetor[meio]){ esquerda = meio -1; }else{ direita = meio +1; } } return -1; } int main(){ setlocale(LC_ALL, ""); int vetor[TAM] = {1, 29, 93, 75, 39, 03, 49, 90, 23, 20}; int valorProcurado; int posicao, posicaoEncontrada; //Auxiliar contador int cont; //Imprime o vetor na tela: imprimeVetor(vetor); cout << "Qual número deseja encontrar?"; cin >> valorProcurado; if(buscaBinaria(vetor, valorProcurado, &posicaoEncontrada) == 1){ cout << "O valor foi encontrado na posição:" << posicaoEncontrada; }else{ cout << "O valor não foi encontado."; } return 0; } Quote
fredericopissarra Posted November 25, 2022 Posted November 25, 2022 (edited) Alguns detalhes: O código não tem nada dependente de localização, então usar setlocale() ali é supérfluo; Busca binária (binary search) exige que o array esteja em ordem... Seu array, obviamente, não está; C (e, de lambuja C++) já possui a rotina bsearch(); C++20 possui o algoritmo std::binary_search(). Edited November 25, 2022 by fredericopissarra 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.