Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Binary Search
- // signed char = inteiro de -128 a 127
- // unsigned char = inteiro de 0 a 255
- #include <stdio.h>
- #include <string.h>
- #define ARRAY_SIZE 10
- #define MAX_STRING_SIZE 20
- signed char binarySearch(char a[][MAX_STRING_SIZE], unsigned char l, unsigned char r, char x[MAX_STRING_SIZE]) {
- // Nome não foi encontrado
- if (l > r)
- return -1;
- // Procurar numa área
- else {
- // Obter índice do meio da área
- unsigned char m = (r-l)/2 + l;
- // Retornar índice se for o nome procurado
- if (!strcmp(a[m], x)) // true se a[m] e x forem iguais
- return m;
- // Procurar na área onde o nome deve estar
- else
- if (strcmp(a[m], x) > 0)
- return binarySearch(a, l, m-1, x);
- else
- return binarySearch(a, m+1, r, x);
- }
- }
- int main(void) {
- // Criar o array onde procurar
- char array[ARRAY_SIZE][MAX_STRING_SIZE] = {
- "Ana",
- "Bruno",
- "Carlos",
- "Daniela",
- "Frederico",
- "Inês",
- "Joana",
- "Mário",
- "Teresa",
- "Vasco"
- };
- // Receber o nome a procurar
- char search[MAX_STRING_SIZE];
- printf("\n Indique o nome a procurar: "); fflush(stdout); // fflush = certificar q faz print
- scanf("%s", search);
- // Receber o índice de onde o nome está
- signed char index = binarySearch(array, 0, ARRAY_SIZE-1, search);
- // Indicar o índice ao user
- if (index == -1)
- printf("\n Erro! Nome não encontrado no array!\n\n");
- else
- printf("\n O nome pedido está no índice %hhu do array.\n\n", index);
- // Terminar
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement