Jump to content

Featured Replies

Posted

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;

}

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().

Edited by fredericopissarra

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

Recently Browsing 0

  • No registered users viewing this page.