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.

306 Capítulo 15. <strong>Algoritmos</strong> de búsqueda y ord<strong>en</strong>ación<br />

begin<br />

extInf:= 1;<br />

extSup:= N;<br />

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

while (not <strong>en</strong>contrado) and (extSup >= extInf) do begin<br />

{Inv.: si elem está <strong>en</strong> v, ⇒ v[extInf] ≤ elem ≤ v[extSup]}<br />

posMed:= (extSup + extInf) div 2;<br />

if elem = v[posMed] th<strong>en</strong><br />

<strong>en</strong>contrado:= True<br />

else if elem > v[posMed] th<strong>en</strong><br />

{se actualizan los extremos del intervalo}<br />

extInf:= posMed + 1<br />

else<br />

extSup:= posMed - 1<br />

<strong>en</strong>d; {while}<br />

if <strong>en</strong>contrado th<strong>en</strong><br />

BusquedaBinaria:= palMed<br />

else<br />

BusquedaBinaria:= 0<br />

<strong>en</strong>d; {BusquedaBinaria}<br />

La necesidad de acceder de forma directa a las compon<strong>en</strong>tes intermedias no<br />

permite la aplicación de este tipo de soluciones a archivos secu<strong>en</strong>ciales.<br />

15.2 Ord<strong>en</strong>ación de arrays<br />

En muchas situaciones se necesita t<strong>en</strong>er ord<strong>en</strong>ados, según algún criterio, los<br />

datos con los que se trabaja para facilitar su tratami<strong>en</strong>to. Así, por ejemplo, <strong>en</strong><br />

un vector donde se t<strong>en</strong>gan almac<strong>en</strong>ados los alumnos de cierta asignatura junto<br />

con la calificación obt<strong>en</strong>ida, sería interesante ord<strong>en</strong>ar los alumnos por ord<strong>en</strong><br />

alfabético, o bi<strong>en</strong>, ord<strong>en</strong>ar el vector según la calificación obt<strong>en</strong>ida para poder<br />

sacar una lista de “Aprobados” y “Susp<strong>en</strong>sos”.<br />

En este apartado se pres<strong>en</strong>tan los algoritmos de ord<strong>en</strong>ación más usuales, de<br />

los muchos exist<strong>en</strong>tes. Su objetivo común es resolver el problema de ord<strong>en</strong>ación<br />

que se <strong>en</strong>uncia a continuación:<br />

Sea v un vector con n compon<strong>en</strong>tes de un mismo tipo, tElem. Definimos la<br />

función ord<strong>en</strong>ación como:<br />

ord<strong>en</strong>ación : Vn(tElem) −→ Vn(tElem)<br />

de tal forma que ord<strong>en</strong>ación(v) = v’ donde v’=(v’1,..., v’n) es una permutación<br />

de v=(v1,..., vn) tal que v’1 ≤ v’2 ≤ . . . ≤ v’n donde ≤ es la<br />

relación de ord<strong>en</strong> elegida para clasificar los elem<strong>en</strong>tos de v.

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

Saved successfully!

Ooh no, something went wrong!