#include #include typedef struct funcionario { int nrmatricula; char nome[40]; float salario; }funcCorp; void ordem_stru (int tamanho, struct funcionario *p); int pesquisaBinaria(struct funcionario *p, int inicio, int fim, int busca); int main (){ int n, busca; funcCorp func[n]; printf("Quantos funcionarios tem na empresa?"); scanf("%i", n); for(int x=0; x (*(p + x + 1)).nrmatricula){ // separa dados da struct aux.a = (*(p + x)).nrmatricula; strcpy(aux.b, (*(p + x)).nome); aux.c = (*(p+x)).salario; //ordena o menor elemnto da struct (*(p + x)).nrmatricula = (*(p + x+1)).nrmatricula; strcpy((*(p + x)).nome, (*(p + x+1)).nome); (*(p+x)).salario = (*(p+x+1)).salario; //joga de volta o dado na struct (*(p + x)).nrmatricula = aux.a; strcpy((*(p + x)).nome, aux.b); (*(p+x)).salario = aux.c; y=x; while(y>0){ if((*(p + y)).nrmatricula < (*(p + y - 1)).nrmatricula){ aux.a = (*(p + y)).nrmatricula; strcpy(aux.b, (*(p + y)).nome); aux.c = (*(p+y)).salario; (*(p + y)).nrmatricula = (*(p + y-1)).nrmatricula; strcpy((*(p + x)).nome, (*(p + y-1)).nome); (*(p+x)).salario = (*(p + y-1)).salario; (*(p + y -1)).nrmatricula = aux.a; strcpy((*(p + y-1)).nome, aux.b); (*(p + y-1)).salario = aux.c; y--; } else break; } } } } int pesquisaBinaria(struct funcionario *p, int inicio, int fim, int busca){ int meio; if(inicio>fim) {return -1;} meio = (inicio + fim) / 2; if( (*(p+meio)).nrmatricula > busca){ return( p,inicio, meio - 1, busca); } else if( (*(p+meio)).nrmatricula < busca){ return pesquisaBinaria(p, meio + 1, fim, busca); } else{//se não é nem maior nem menor logo foi encontrado o cadastro :D return meio; } }