Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
7 Pesquisa e ordenação<br />
7.1 Introdução<br />
Neste capítulo, discutir<strong>em</strong>os dois probl<strong>em</strong>as clássicos de computação. O primeiro deles, pesquisa,<br />
busca ou consulta, consiste <strong>em</strong> se verificar se um dado valor está armazenado num vetor (ou num campo de<br />
um registro de um arquivo, como ver<strong>em</strong>os no capítulo 9).<br />
São vários os ex<strong>em</strong>plos de pesquisas <strong>em</strong> computação. Uma busca por páginas da internet que<br />
contenham um determinado assunto; uma busca no Registro Nacional de Veículos Automotores<br />
(RENAVAM) na tentativa de se encontrar o nome do proprietário do veículo de uma placa dada; uma busca<br />
nos registros da Receita Federal a respeito de um CPF dado.<br />
O segundo probl<strong>em</strong>a é conhecido como ordenação ou classificação (introduzido superficialmente no<br />
capítulo 3) consiste <strong>em</strong> se colocar numa ord<strong>em</strong> preestabelecida uma relação de valores. No capítulo referido,<br />
mostramos como ordenar uma relação contendo três valores. Neste capítulo, apresentar<strong>em</strong>os algoritmos para<br />
ordenar uma lista com qualquer número de valores. A ordenação de uma relação é realizada para que a<br />
leitura dos resultados seja facilitada ou para que, como ver<strong>em</strong>os abaixo, pesquisas sejam realizadas com mais<br />
eficiência. Um ex<strong>em</strong>plo prático da necessidade da ordenação ocorre na confecção da lista dos aprovados<br />
num concurso vestibular. Algumas universidades divulgam esta lista com os nomes dos aprovados <strong>em</strong> ord<strong>em</strong><br />
alfabética e outras <strong>em</strong> ord<strong>em</strong> de classificação. Tanto num caso como no outro há necessidade de ordenação.<br />
7.2 Pesquisa sequencial<br />
O método de busca de mais fácil compreensão é o que t<strong>em</strong>os utilizado até agora e é chamado<br />
pesquisa sequencial. Este método consiste <strong>em</strong> se percorrer, a partir da componente zero, todo o vetor<br />
comparando-se o valor de cada componente com o valor pesquisado. Naturalmente, a pesquisa se encerra<br />
quando o valor pesquisado é encontrado ou quando se atinge o final do vetor, significando, neste caso, que a<br />
pesquisa não foi b<strong>em</strong> sucedida.<br />
A função abaixo pesquisa, numa relação de inteiros armazenada <strong>em</strong> v, um inteiro passado para o<br />
parâmetro x. Observe que o parâmetro t receberá a quantidade de el<strong>em</strong>entos da relação e que a função<br />
retornará a posição do valor procurado na relação, se a pesquisa for b<strong>em</strong> sucedida, e -1 se o valor procurado<br />
não for encontrado.<br />
int PesqSeq(int *v, int t, int x)<br />
{<br />
int i;<br />
i = 0;<br />
while ((v[i] != x) && (i < t))<br />
i = i + 1;<br />
if (i == t)<br />
return -1;<br />
else<br />
return i + 1;<br />
}<br />
7.3 Pesquisa binária<br />
É muito fácil perceber que o método da pesquisa binária é bastante ineficiente: imagine que este<br />
método fosse utilizado para se pesquisar a palavra zumbaia num dicionário da língua portuguesa (a<br />
propósito, zumbaia significa cortesia exagerada; cumprimento ruidoso e servil).<br />
Quando a relação está ordenada, existe um método de busca, chamado pesquisa binária, b<strong>em</strong> mais<br />
eficiente do que a pesquisa sequencial: compara-se o el<strong>em</strong>ento pesquisado com a componente "central" da<br />
relação; se for<strong>em</strong> iguais, a pesquisa é encerrada com sucesso; se o el<strong>em</strong>ento pesquisado for menor que a