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 317<br />

El algoritmo Merge Sort puede esbozarse como sigue:<br />

si v es de tamaño 1 <strong>en</strong>tonces<br />

v ya está ord<strong>en</strong>ado<br />

si no<br />

Dividir v <strong>en</strong> dos subvectores A y B<br />

fin {si}<br />

Ord<strong>en</strong>ar A y B usando Merge Sort<br />

Mezclar las ord<strong>en</strong>aciones de A y B para g<strong>en</strong>erar el vector ord<strong>en</strong>ado.<br />

En este caso, el paso Dividir v <strong>en</strong> dos subvectores A y B consistirá <strong>en</strong>:<br />

Asignar a A el subvector [v1, . . . , vn div 2]<br />

Asignar a B el subvector [vn div 2+1, . . . , vn]<br />

mi<strong>en</strong>tras que Mezclar las ord<strong>en</strong>aciones de A y B consistirá <strong>en</strong> desarrollar un<br />

procedimi<strong>en</strong>to (que llamaremos Merge) <strong>en</strong>cargado de ir <strong>en</strong>tremezclando adecuadam<strong>en</strong>te<br />

las compon<strong>en</strong>tes ya ord<strong>en</strong>adas de A y de B para obt<strong>en</strong>er el resultado<br />

buscado.<br />

De acuerdo con este diseño se llega a la implem<strong>en</strong>tación que se muestra a<br />

continuación. Al igual que <strong>en</strong> la implem<strong>en</strong>tación de Quick Sort, se sitúan los<br />

subvectores sobre el propio vector original v <strong>en</strong> lugar de g<strong>en</strong>erar dos nuevos<br />

arrays.<br />

procedure MergeSort(var vector: tVector);<br />

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

procedure MergeSortDesdeHasta(var v: vector; izq, der: integer);<br />

{Efecto: se ord<strong>en</strong>a v[izq..der] asc<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te}<br />

var<br />

c<strong>en</strong>tro : tIntervalo;<br />

procedure Merge(vec: tVector; iz, ce, de: tIntervalo;<br />

var w: tVector);<br />

{Efecto: w := mezcla ord<strong>en</strong>ada de los subvectores v[iz..ce] y<br />

v[ce+1..de]}<br />

var<br />

i,j,k: 1..N;<br />

begin {Merge}<br />

i:= iz;<br />

j:= ce + 1;<br />

k:= iz;<br />

{k recorre w, vector que almac<strong>en</strong>a la ord<strong>en</strong>ación total}<br />

while (i

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

Saved successfully!

Ooh no, something went wrong!