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.

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

izq i k der<br />

v[l] < p v[m] = p v[n] > p<br />

izq < l < i < m < k < n < der<br />

Figura 15.4.<br />

Donde Dividir v <strong>en</strong> dos bloques A y B se puede refinar <strong>en</strong>:<br />

Elegir un elem<strong>en</strong>to p (pivote) de v<br />

para cada elem<strong>en</strong>to del vector hacer<br />

si elem<strong>en</strong>to < p <strong>en</strong>tonces<br />

Colocar elem<strong>en</strong>to <strong>en</strong> A, el subvector con los elem<strong>en</strong>tos de v<br />

m<strong>en</strong>ores que p<br />

<strong>en</strong> otro caso<br />

Colocar elem<strong>en</strong>to <strong>en</strong> B, el subvector con los elem<strong>en</strong>tos de v<br />

mayores que p<br />

❡❡ <br />

De cara a la implem<strong>en</strong>tación, y por razones de simplicidad y ahorro de<br />

memoria, es preferible situar los subvectores sobre el propio vector original<br />

v <strong>en</strong> lugar de g<strong>en</strong>erar dos nuevos arrays.<br />

Con todo lo anterior, una implem<strong>en</strong>tación de este algoritmo podría ser:<br />

procedure QuickSort(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 />

procedure SortDesdeHasta(var v: tVector; izq,der: tIntervalo);<br />

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

var<br />

i,j: tIntervalo;<br />

p,aux: tElem;<br />

begin<br />

i:= izq;<br />

j:= der;<br />

{se divide el vector v[izq..der] <strong>en</strong> dos trozos eligi<strong>en</strong>do como<br />

pivote p el elem<strong>en</strong>to medio del array}<br />

p:= v[(izq + der) div 2];<br />

{si i >= d el subvector ya está ord<strong>en</strong>ado}<br />

{Inv.: ∀ s, izq ≤ s < i, ⇒ v[s] < p<br />

y ∀ t tal que j < t ≤ der ⇒ v[s] > p}

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

Saved successfully!

Ooh no, something went wrong!