#include #include #include #include #define MAX 100 // Declarações // typedef struct reg { int chave; char nome[50]; } registro; typedef struct s_ind { int chave,endereco; } index; registro lista[MAX]; index indice[MAX]; // Lista de nomes - 24 nomes // char *nomes[]= {"Marcelo","Joao","Larissa","Pedro","Ricardo","Leandro","Luiz","Manuel","Maria","Roberta","Renata", "Raimunda","Nelsa","Gustavo","Bruno","Sofia","Kelly","Anderson","John","Roberto","Gabriela","Giovana","Raissa", "Murilo","Dojival"}; // Lista de Sobrenomes - 8 Sobrenomes // char *sobrenomes[] = {"Valdo","Silva","Rodrigues","Silveira","DeBastos","Lima","Pinha","Santos","Muniz", "Nack","Neckel" }; // 11 Sobrenomes void popular(); void ler(); void mostra(); int partition( index *a, int l, int r); void quickSort( index *a, int l, int r); int binsrch(index *pos,int tmp_mat,int low, int high); FILE *arquivo; // Fim declarações main() { int posicao,arqp,i; char nome[50]; popular(); ler(); quickSort(indice,0,MAX-1); printf("Digite a chave a ser pesquisada: "); scanf("%d",&i); posicao = binsrch(indice,i,0,MAX-1); if(posicao > 0) { printf("Posição no array organizado: %d\n",posicao); arqp = indice[posicao].endereco; if((arquivo=fopen("registro.txt","r"))==NULL) printf("erro no arquivo"); fseek(arquivo,arqp,0); fscanf(arquivo,"%d %s",&arqp,nome); printf("Chave: %d --- Nome: %s",arqp,nome); } else printf("Não encontrou !"); getche(); } void popular() { //Declarações srand(time(NULL)); // Randomizando int i; //Fim declarações if((arquivo=fopen("registro.txt","w"))==NULL) printf("erro no arquivo"); for(i=0;i pivot ); if( i >= j ) break; t = a[i].chave; a[i].chave = a[j].chave; a[j].chave = t; } t = a[l].chave; a[l].chave = a[j].chave; a[j].chave = t; return j; } void quickSort( index *a, int l, int r) { int j; if( l < r ) { // divide and conquer j = partition( a, l, r); quickSort( a, l, j-1); quickSort( a, j+1, r); } } int binsrch(index *pos,int tmp_mat,int low, int high) { int meio; if(low>high) return(-1); meio=(high+low)/2; if(tmp_mat==pos[meio].chave) return (meio); if(tmp_mat