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.

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

v ≡<br />

Divisi—n<br />

Mezcla<br />

ord<strong>en</strong>ada<br />

izq<br />

izq<br />

sort<br />

c<strong>en</strong>tro<br />

sort sort<br />

c<strong>en</strong>tro c<strong>en</strong>tro + 1<br />

. . .<br />

Figura 15.5.<br />

los algoritmos de selección, inserción e intercambio. Un ejemplo de esta situación<br />

se ti<strong>en</strong>e cuando el vector por ord<strong>en</strong>ar ti<strong>en</strong>e los elem<strong>en</strong>tos inicialm<strong>en</strong>te dispuestos<br />

<strong>en</strong> ord<strong>en</strong> desc<strong>en</strong>d<strong>en</strong>te y el pivote elegido es, precisam<strong>en</strong>te, el primer (o el último)<br />

elem<strong>en</strong>to.<br />

15.2.5 Ord<strong>en</strong>ación por mezcla (Merge Sort)<br />

Al igual que Quick Sort, el algoritmo de ord<strong>en</strong>ación Merge Sort va a utilizar<br />

la técnica divide y v<strong>en</strong>cerás. En este caso la idea clave del algoritmo consiste <strong>en</strong><br />

dividir el vector v <strong>en</strong> dos subvectores A y B (de igual tamaño, si es posible), sin<br />

t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta ningún otro criterio de división.<br />

Posteriorm<strong>en</strong>te se mezclarán ord<strong>en</strong>adam<strong>en</strong>te las soluciones obt<strong>en</strong>idas al ord<strong>en</strong>ar<br />

A y B (aplicando nuevam<strong>en</strong>te, a cada uno de los subvectores, el algoritmo<br />

Merge Sort). En la figura 15.5 se muestra un esquema de este algoritmo.<br />

Para Merge Sort también se pued<strong>en</strong> considerar las condiciones de parada<br />

descritas <strong>en</strong> el apartado anterior para el algoritmo Quick Sort, desarrollándose<br />

a continuación el diseño desc<strong>en</strong>d<strong>en</strong>te y la implem<strong>en</strong>tación para el primer caso<br />

de parada (cuando se llega a subvectores de longitud 1). Se deja como ejercicio<br />

para el lector el desarrollo de la implem<strong>en</strong>tación de Merge Sort con la segunda<br />

condición de parada, es decir, la combinación de Merge Sort con otro algoritmo<br />

de ord<strong>en</strong>ación cuando se llega a subvectores de una longitud dada.<br />

. . .<br />

. . .<br />

der<br />

der

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

Saved successfully!

Ooh no, something went wrong!