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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

procedure Ord<strong>en</strong>acionPorIntercambio(var v: tVector);<br />

{Efecto: se ord<strong>en</strong>a v asc<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te}<br />

var<br />

i, j: tIntervalo;<br />

aux: tElem;<br />

begin<br />

for i:= 1 to N-1 do<br />

{Inv.: ∀ j, 1 ≤ j < i, ⇒ v[j] ≤ v[k], ∀ k tal que j ≤ k < N}<br />

for j:= N downto i + 1 do<br />

{Se busca el m<strong>en</strong>or desde atrás y se sitúa <strong>en</strong> vi}<br />

if v[j-1] > v[j] th<strong>en</strong> begin {intercambio}<br />

aux:= v[j];<br />

v[j]:= v[j-1];<br />

v[j-1]:= aux<br />

<strong>en</strong>d {if}<br />

<strong>en</strong>d; {Ord<strong>en</strong>acionPorIntercambio}<br />

15.2.4 Ord<strong>en</strong>ación rápida (Quick Sort)<br />

El algoritmo de ord<strong>en</strong>ación rápida 2 debido a Hoare, consiste <strong>en</strong> dividir el<br />

vector que se desea ord<strong>en</strong>ar <strong>en</strong> dos bloques. En el primer bloque se sitúan<br />

todos los elem<strong>en</strong>tos del vector que son m<strong>en</strong>ores que un cierto valor de v que<br />

se toma como refer<strong>en</strong>cia (valor pivote), mi<strong>en</strong>tras que <strong>en</strong> el segundo bloque se<br />

colocan el resto de los elem<strong>en</strong>tos, es decir, los que son mayores que el valor<br />

pivote. Posteriorm<strong>en</strong>te se ord<strong>en</strong>arán (sigui<strong>en</strong>do el mismo proceso) cada uno<br />

de los bloques, uniéndolos una vez ord<strong>en</strong>ados, para formar la solución. En la<br />

figura 15.3 se muestran gráficam<strong>en</strong>te las dos fases de ord<strong>en</strong>ación.<br />

Evid<strong>en</strong>tem<strong>en</strong>te, la condición de parada del algoritmo se da cuando el bloque<br />

que se desea ord<strong>en</strong>ar esté formado por un único elem<strong>en</strong>to, <strong>en</strong> cuyo caso,<br />

obviam<strong>en</strong>te, el bloque ya se <strong>en</strong>cu<strong>en</strong>tra ord<strong>en</strong>ado.<br />

También se puede optar por det<strong>en</strong>er el algoritmo cuando el número de elem<strong>en</strong>tos<br />

del bloque sea sufici<strong>en</strong>tem<strong>en</strong>te pequeño (g<strong>en</strong>eralm<strong>en</strong>te con un número<br />

aproximado de 15 elem<strong>en</strong>tos), y ord<strong>en</strong>ar éste sigui<strong>en</strong>do alguno de los algoritmos<br />

vistos anteriorm<strong>en</strong>te (el de inserción directa, por ejemplo).<br />

❡❡ <br />

El número elegido de 15 elem<strong>en</strong>tos es ori<strong>en</strong>tativo. Se debería elegir dicha<br />

cantidad mediante pruebas de <strong>en</strong>sayo para localizar el valor óptimo.<br />

Aunque cualquier algoritmo de ord<strong>en</strong>ación visto anteriorm<strong>en</strong>te sea “más<br />

l<strong>en</strong>to” (como veremos <strong>en</strong> el capítulo de complejidad algorítmica) que el Quick<br />

Sort, este último pierde gran cantidad de tiempo <strong>en</strong> clasificar los elem<strong>en</strong>tos <strong>en</strong><br />

2 Quick Sort <strong>en</strong> inglés.

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

Saved successfully!

Ooh no, something went wrong!