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.2. Ord<strong>en</strong>ación de arrays 319<br />

1<br />

2<br />

3<br />

4<br />

5<br />

òrsula<br />

Enrique<br />

Orlando<br />

Adri‡n<br />

Isabel<br />

. . .<br />

. . .<br />

. . .<br />

. . .<br />

. . .<br />

Ord<strong>en</strong>aci—n<br />

Figura 15.6.<br />

Adri‡n<br />

Enrique<br />

Isabel<br />

Orlando<br />

òrsula<br />

Una posibilidad interesante consiste <strong>en</strong> crear otro vector vectPosic de la<br />

forma<br />

array[1..N] of [1..N]<br />

cuyas compon<strong>en</strong>tes refier<strong>en</strong> una ficha completa, mediante su posición, si<strong>en</strong>do<br />

inicialm<strong>en</strong>te<br />

vectPosic[i] = i ∀i ∈ {1, . . . N}<br />

El interés de esta repres<strong>en</strong>tación indirecta reside <strong>en</strong> aplicar este método a<br />

cualquiera de los algoritmos de ord<strong>en</strong>ación estudiados, con la v<strong>en</strong>taja de que la<br />

ord<strong>en</strong>ación se puede efectuar intercambiando las posiciones <strong>en</strong> vez de los registros<br />

(ext<strong>en</strong>sos) completos.<br />

Por ejemplo, supongamos que el tipo de datos tFicha es un registro con<br />

datos personales, <strong>en</strong>tre los que se incluye el nombre. La figura 15.6 muestra el<br />

vector vectFich antes y después de la ord<strong>en</strong>ación.<br />

Si no se emplea el método de los vectores paralelos, el algoritmo de ord<strong>en</strong>ación<br />

empleado debería incluir instrucciones como las sigui<strong>en</strong>tes:<br />

if vectFich[i].nombre > vectFich[j].nombre th<strong>en</strong> begin<br />

{Intercambiar vectFich[i], vectFich[j]}<br />

elemAux:= vectFich[i];<br />

vectFich[i]:= vectFich[j];<br />

vectFich[j]:= elemAux<br />

<strong>en</strong>d<br />

Como se puede comprobar, <strong>en</strong> las instrucciones de intercambio es necesario<br />

mant<strong>en</strong>er tres copias de elem<strong>en</strong>tos del tipo tElem<strong>en</strong>to. Sin embargo, si se utiliza<br />

un vector paralelo (como se muestra <strong>en</strong> la figura 15.7), sólo se produc<strong>en</strong><br />

cambios <strong>en</strong> el vector de posiciones. El fragm<strong>en</strong>to de código correspondi<strong>en</strong>te a los<br />

intercambios quedaría como sigue:<br />

1<br />

2<br />

3<br />

4<br />

5<br />

. . .<br />

. . .<br />

. . .<br />

. . .<br />

. . .

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

Saved successfully!

Ooh no, something went wrong!