09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

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.

15.1. <strong>Algoritmos</strong> de búsqueda <strong>en</strong> arrays 305<br />

vacío). Este algoritmo de búsqueda recibe el nombre de búsqueda binaria, ya<br />

que va dividi<strong>en</strong>do el vector <strong>en</strong> dos subvectores de igual tamaño.<br />

Vamos ahora a realizar una implem<strong>en</strong>tación de una función sigui<strong>en</strong>do el algoritmo<br />

de búsqueda binaria realizando un diseño desc<strong>en</strong>d<strong>en</strong>te del problema, del<br />

cual el primer refinami<strong>en</strong>to puede ser:<br />

Asignar valores iniciales extInf, extSup, <strong>en</strong>contrado;<br />

Buscar elem <strong>en</strong> v[extInf..extSup];<br />

Devolver el resultado de la función<br />

Refinando Asignar valores iniciales se ti<strong>en</strong>e:<br />

extInf:= 1;<br />

extSup:= N;<br />

{se supone que N es el tama~no del array inicial}<br />

<strong>en</strong>contrado:= False;<br />

En un nivel más refinado de Buscar elem <strong>en</strong> v[extInf..extSup] se ti<strong>en</strong>e:<br />

mi<strong>en</strong>tras el vector no sea vacío y<br />

no se ha <strong>en</strong>contrado el valor c hacer<br />

calcular el valor de posMed;<br />

si v[posMed] = elem <strong>en</strong>tonces<br />

actualizar el valor de <strong>en</strong>contrado<br />

si no<br />

actualizar los valores extInf o extSup según donde esté elem<br />

Refinando devolver el resultado de la función obt<strong>en</strong>emos:<br />

si se ha <strong>en</strong>contrado el valor <strong>en</strong>tonces<br />

BusquedaBinaria:= posMed;<br />

si no<br />

BusquedaBinaria:= 0;<br />

Con todo esto, una posible implem<strong>en</strong>tación sería:<br />

function BusquedaBinaria(v: tVector; elem: tElem): tIntervalo;<br />

{PreC.: v está ord<strong>en</strong>ado creci<strong>en</strong>tem<strong>en</strong>te}<br />

{Dev. 0 (si elem no está <strong>en</strong> v) ó i (si v[i] = elem)}<br />

var<br />

extInf, extSup, {extremos del intervalo}<br />

posMed: tIntervalo; {posición c<strong>en</strong>tral del intervalo}<br />

<strong>en</strong>contrado: boolean;

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

Saved successfully!

Ooh no, something went wrong!