Algoritmos de Busca #4 – Busca Direta Transformada

Padrão


Temos aqui outro algoritmo de busca, chamado de Busca Direta Transformada. Dos algoritmos de busca apresentados até agora, este é o que possui o melhor desempenho.

Segue a implementação do algoritmo em C:

int buscaDiretaTransformada(int *vetor, int chave, int tamanho)<br />
{<br />
   int kmenor = vetor[0];<br />
   int kmaior = vetor[tamanho - 1];<br />
   int den = kmaior - kmenor;<br />
   int cte1 = (kmaior - (tamanho - 1) * kmenor) / den;<br />
   int cte2 = (tamanho - 2) / den;</p>
<p>   int end = cte1 + chave * cte2;</p>
<p>   if(chave != vetor[end])<br />
   {<br />
      if(chave &lt; vetor[end])<br />
         while(end &gt; 0 &amp;&amp; chave &lt; vetor[end])<br />
            end--;<br />
      else<br />
         while(end &lt; tamanho - 1 &amp;&amp; chave &gt; vetor[end])<br />
            end++;<br />
   }</p>
<p>   if(end &gt;= 0 &amp;&amp; end &lt; tamanho &amp;&amp; chave == vetor[end])<br />
      return end;</p>
<p>   return -1;<br />
}