Jump to content

Recommended Posts

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;

}

Posted (edited)

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
  • Curtir 1

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...