Escolar Documentos
Profissional Documentos
Cultura Documentos
7 Busca em Vetores
Busca em vetor
Busca linear
Busca binria
Busca em vetor:
entrada: vetor vet com n elementos
elemento elem
sada: n se o elemento elem ocorre em vet[n]
-1 se o elemento no se encontra no vetor
/* no encontrou */
return -1;
}
01/04/2014 (c) Dept. Informtica - PUC-Rio 4
Anlise da Busca Linear em Vetor
pior caso:
n comparaes, onde n representa o nmero de elementos do
vetor
desempenho computacional varia linearmente em relao ao
tamanho do problema (algoritmo de busca linear)
complexidade: O(n)
caso mdio:
n/2 comparaes
desempenho computacional continua variando linearmente em
relao ao tamanho do problema
complexidade: O(n)
/* no encontrou */
return -1;
}
01/04/2014 (c) Dept. Informtica - PUC-Rio 6
Anlise da Busca Linear em Vetor Ordenado
prs:
dados armazenados em vetor, de forma ordenada
bom desempenho computacional para pesquisa
contra:
inadequado quando inseres e remoes so freqentes
exige re-arrumar o vetor para abrir espao uma insero
exige re-arrumar o vetor aps uma remoo
Escreva uma funo que faa uma busca binria em um vetor de ponteiros
para o tipo Funcionario, cujos elementos esto em ordem alfabtica dos
nomes dos funcionrios. Essa funo deve receber como parmetros o
nmero de funcionrios, o vetor e o nome do funcionrio que se deseja
buscar, e deve ter como valor de retorno um ponteiro para o registro do
funcionrio procurado. Se no houver um funcionrio com o nome
procurado, a funo deve retornar NULL. Sua funo deve ter o seguinte
cabealho:
Funcionario* busca (int n, Funcionario** v, char* nome);
Escreva uma funo que faa uma busca binria em um vetor de ponteiros para o tipo
Licenca, cujos elementos esto em ordem cronolgica, de acordo com a data de incio das
licenas, com desempate pela ordem alfabtica de acordo com o nome dos funcionrios.
Se existir mais de uma licena com incio na data procurada, a funo deve retornar o
ndice da primeira delas. Se no houver uma licena com a data procurada, a funo deve
retornar -1. Sua funo deve ter o seguinte cabealho:
int busca (Licenca** v, int n, Data d);
return m;
}
}
return -1;/* no encontrou */
}
Busca binria:
compare elem com o elemento do meio de vet
se elem for menor, pesquise na primeira metade do vetor
se elem for maior, pesquise na segunda parte do vetor
se for igual, retorne a posio
continue o procedimento, subdividindo a parte de interesse,
at encontrar o elemento ou chegar a uma parte do vetor com
tamanho 0