22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!