Função de Busca Binária dando Erro

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;
}`

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;
   }
}
1 curtida