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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

componente central repete-se a pesquisa <strong>em</strong> relação à "primeira metade" da relação; se o el<strong>em</strong>ento<br />

pesquisado for maior repete-se a pesquisa <strong>em</strong> relação à "segunda metade" da relação. Por ex<strong>em</strong>plo, uma<br />

pesquisa do número 7 na relação {1, 3, 4, 5, 6, 8, 10, 11, 12, 15, 18, 19, 20, 21, 22, 25, 26} começaria<br />

comparando-se 7 com 12; como 7 < 12, pesquisa-se 7 na relação {1, 3, 4, 5, 6, 8, 10, 11}; para isto comparase<br />

7 com 5 e, como 7 > 5, pesquisa-se este valor na relação {6, 8, 10, 11}; pesquisa-se na relação {6, 8};<br />

pesquisa-se <strong>em</strong> {6} e conclui-se que 7 não está relação.<br />

int PesqBinaria(int *v, int t, int x)<br />

{<br />

int i, Central;<br />

i = 0;<br />

Central = t/2;<br />

while ((x != v[Central]) && (i t)<br />

return (-1);<br />

else<br />

return(Central);<br />

}<br />

A pesquisa binária também é importante no desenvolvimento da lógica de programação pelo fato de<br />

que é uma função que pode ser impl<strong>em</strong>entada recursivamente, s<strong>em</strong> que a impl<strong>em</strong>entação recursiva seja<br />

menos eficiente do que a não recursiva. Para perceber a recursividade basta ver que a mesma pesquisa se<br />

repete, sendo que, <strong>em</strong> cada repetição, o vetor pesquisado t<strong>em</strong> alterado a posição da sua última componente<br />

ou da sua primeira componente.<br />

int PesqBinRec(int *v, int i, int t, int x)<br />

{<br />

int Central;<br />

Central = (i + t)/2;<br />

if (v[Central] == x)<br />

return (Central + 1);<br />

else<br />

if (t < i)<br />

return (-1);<br />

else<br />

if (x < v[Central])<br />

PesqBinRec(v, i, Central - 1, x);<br />

else<br />

PesqBinRec(v, Central + 1, t, x);<br />

}<br />

7.4 Ordenação<br />

O SelecSort<br />

O algoritmo SelectSort consiste <strong>em</strong> se selecionar, sucessivamente, o maior el<strong>em</strong>ento, o segundo maior<br />

el<strong>em</strong>ento, o terceiro maior el<strong>em</strong>ento, etc., e, após cada seleção, armazenar o valor selecionado num vetor<br />

auxiliar na posição que mantém o tal vetor auxiliar ordenado. Por ex<strong>em</strong>plo, se se pretende a ordenação <strong>em</strong>

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

Saved successfully!

Ooh no, something went wrong!