Função de Busca Binária dando Erro

1 resposta
nanquim

Olá, já reescrevi essa função várias vezes, vi vários vídeos e exemplos na internet, mas não consegui fazer a função de busca binária desse código funcionar.

O erro atual é Só encontra o número 21, os outros caem no return -1 (“elemento não encontrado”)
Podem me ajudar?
*NÃO ESTOU CONSEGUINDO FORMATAR ESTE CODIGO!!

`#include
#define TAM 8
using namespace std;

void bubble(int vetor[]);

int buscaBinaria(int v[], int e);

void imprime(int v[]);

int main(){

int op, vetor[TAM] = {108, 9, 30, 21, 12, 3, 48, 39}, e, p;

//mostrando vetor:
for(int i=0;i<TAM;i++){
	cout << vetor[i];
	if(i != TAM-1){
		cout << " - ";
	}
}
cout << endl << endl;

//menu
do{
	cout << "1 - Pesquisa Binaria" << endl;
	cout << "2 - Apresentar os dados da lista" << endl;	
	cout << "3 - Terminar o programa" << endl;
	cin >> op;


	switch(op){
		case 1:
			bubble(vetor);
			cout << "Entre com elemento a ser buscado: "; cin >> e;
			p = buscaBinaria(vetor, e);
			if(p == -1){
				cout << "\nElemento nao encontrado no vetor\n";
			}else{
				cout << "\nElemento encontrado na posicao " << p << " do vetor.\n\n";	
			}
			break;
		case 2:
			imprime(vetor);
			break;
		case 3:
			return 0;
			break;				
		default:
			cout << "Opcao Invalida." << endl;
			break;
	}	
}while(op != 3);
}

//funcoes

void bubble(int vetor[]){

int aux;

for(int i=0; i<TAM;i++){

for(int j=0; j<TAM-1; j++){

if(vetor[j] > vetor[j+1]){

aux = vetor[j];

vetor[j] = vetor[j+1];

vetor[j+1] = aux;

}

}

}

cout << “\nVetor Ordenado pelo Bubble Sort: \n;

for(int j=0; j<TAM; j++){

cout << vetor[j] << " ";

}

cout << “\n\n;

}
//PROBLEMA:
int buscaBinaria(int v[], int e){

int ini = 0, meio, fim = TAM-1;

while(ini <= fim & meio != e){

meio = (ini + fim) / 2;

if(v[meio] == e){

return meio; //retorna a posicao de e;

}else if(v[meio] < e){

ini = meio+1;

}else if(v[meio] > e){

fim = meio-1;

}

return -1;

}

}
void imprime(int v[]){

for(int i=0; i<TAM; i++){

cout << v[i] << " ";

}

cout << endl;

}`

1 Resposta

Ibrahim_Mattus_Neto

Boa tarde.

Consegue verificar se seu bubble sort está funcionando corretamente? consegui reproduzir esse erro quando não ordenei o vetor.

Além disso na função busca binária na clausula do while while(ini <= fim & meio != e){ ele não estava pegando o elemento na posição 0, deixei apenas while (ini <= fim) e consegui pegar todos os elementos.

void bubble(int vetor[]){
int i,j;
int aux;

for (i = 0; i < TAM; i++) {

        for (j = 0; j < TAM-1; j++) {
            if(vetor[j] > vetor[j+1]){
	        aux = vetor[j];
	        vetor[j] = vetor[j+1];
	        vetor[j+1] = aux;
	    }

        } 
    }

}

Abaixo a parte do while (fiz tudo dentro do main então deve estar um pouco diferente do seu)

while (ini <= fim) {
   meio = (ini + fim) / 2;
   if (vetor[meio] == e) {
       printf("numero encontrado em: %d", meio);
       break;
   } else if (vetor[meio] < e) {
       ini = meio + 1;
   } else if (vetor[meio] > e) {
       fim = meio - 1;
   }
}
Criado 26 de abril de 2016
Ultima resposta 27 de abr. de 2016
Respostas 1
Participantes 2