Olá pessoal, queria saber se alguém poderia analizar meu código que está com problema na hora de retornar o valor da busca binária. É o seguinte, no programa entra com a matricula de 5 alunos e seus respectivos nomes. Depois ele coloca em ordem de matricula(só porque o enunciado pediu, mas é inútil), em seguida coloca em ordem alfabética. Depois entra com um nome, que será a chave para a busca, em seguida roda a busca binária para localizar o nome e tem que retornar o numero da matricula. É aí que está o problema, aparentemente não está comparando ou não está retornando.  Desde já agradeço.  O código:  #include <cstdlib>
#include <iostream>
#define tamanho 5
#define nometamanho 30
using namespace std;
struct tno
{
   int matricula;
   char nome[nometamanho];
};
struct tfila 
{
   struct tno no[tamanho];
   int topo;
};
void iniciafila (struct tfila*fila)
{
   fila->topo=0;
}
int ordenainsercao(struct tfila*fila, struct tno no[], int tam)
{
   int j,i,aux;
   tno noaux;
   for (j=1; j<tam; j++){
      aux=no[j].matricula;
      for (i=j-1; i>=0 && no[i].matricula > noaux.matricula; i--){
         no[i+1]=no[i];
      }
      no[i+1]=noaux;
   }
}
int ordenanome (struct tfila * fila , struct tno no[] , int tam)
{
   int j,i;
   tno noaux;
   for (j=1; j<tam; j++){
      noaux,no[j];
      for (i=j-1; i>=0 && strcmp(no[i].nome,noaux.nome)>0; i--){
         no[i+1]=no[i];
      }
      no[i+1]=noaux;
   }
}
int buscabinaria (struct tfila* fila, struct tno  no[], int tam, char chave[],int nometam )
{
   int e,m,d; e=0; d=tam-1;
   while (e<=d){
      m=(e+d)/2;
      if (strcmp(no[m].nome,chave)==0){
         return no[m].matricula;
      }
      if (strcmp(no[m].nome,chave)>0){
         e=m+1;
      }
      else{
         d=m-1;
      }
     return 0;
   }
}
               
int main(int argc, char *argv[])
{
   struct tfila fila;
   int c, retornopesquisa;
   struct tno no[tamanho];
   char chave[nometamanho];
    
   iniciafila(&fila);
           
   for (c=0; c<tamanho; c++){
      cout<<"\n digite "<<c+1<<"o matricula: ";
      cin>>no[c].matricula;
      cout<<"\n digite "<<c+1<<"o nome: ";
      cin>>no[c].nome;
   }
   ordenainsercao(& fila , no, tamanho);
   ordenanome(& fila, no, tamanho);
   cout<<"\n digite nome para ser pesquisado  \n ";
   cin>>chave;
   retornopesquisa=buscabinaria(& fila, no, tamanho, chave, nometamanho);
   if(retornopesquisa==0){
      cout<<"\n nenhum nome ou  matricula encontarada  \n ";
   }
   else{
      cout<<"nome encontrado a matricula referente a este nome e: \n ";
      cout<<retornopesquisa +1;
   }
   system("PAUSE");
}