Ir para conteúdo

Busca Binária


bf0269714@gmail.com

Posts Recomendados

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;

}

Link para o comentário
Compartilhar em outros sites

Alguns detalhes:

  1. O código não tem nada dependente de localização, então usar setlocale() ali é supérfluo;
  2. Busca binária (binary search) exige que o array esteja em ordem... Seu array, obviamente, não está;
  3. C (e, de lambuja C++) já possui a rotina bsearch();
  4. C++20 possui o algoritmo std::binary_search().
Editado por fredericopissarra
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...