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.

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

La situación final <strong>en</strong> el ejemplo es repres<strong>en</strong>tada <strong>en</strong> la sigui<strong>en</strong>te figura:<br />

1 2 4 5 7 8 9<br />

_ _<br />

El primer nivel de diseño del algoritmo es:<br />

para cada i <strong>en</strong>tre 1 y n - 1 hacer<br />

Colocar <strong>en</strong> vi el m<strong>en</strong>or <strong>en</strong>tre vi, . . . ,vn;<br />

Devolver v, ya ord<strong>en</strong>ado<br />

donde Colocar <strong>en</strong> vi el m<strong>en</strong>or <strong>en</strong>tre vi, . . . ,vn es:<br />

valM<strong>en</strong>or:= v[i];<br />

posM<strong>en</strong>or:= i;<br />

para cada j <strong>en</strong>tre i + 1 y n hacer<br />

si v[j] < valM<strong>en</strong>or <strong>en</strong>tonces<br />

valM<strong>en</strong>or:= v[j];<br />

posM<strong>en</strong>or:= j<br />

fin {si}<br />

fin {para}<br />

Intercambiar v[i] con v[PosM<strong>en</strong>or];<br />

Por lo tanto, una posible implem<strong>en</strong>tación de ord<strong>en</strong>ación de un vector, sigui<strong>en</strong>do<br />

el algoritmo de selección directa, podría ser la sigui<strong>en</strong>te:<br />

procedure SeleccionDirecta(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, posM<strong>en</strong>or: tIntervalo;<br />

valM<strong>en</strong>or, aux: integer;<br />

begin<br />

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

{Inv.: ∀ j, 1 ≤ j ≤ i −1, ⇒ v[j] ≤ v[j+1]<br />

y además todos los v[i]...v[N] son mayores que v[i-1]}<br />

valM<strong>en</strong>or:= v[i];<br />

{se dan valores iniciales}<br />

posM<strong>en</strong>or:= i;<br />

for j:= i + 1 to n do<br />

if v[j] < valM<strong>en</strong>or th<strong>en</strong> begin<br />

{se actualiza el nuevo valor m<strong>en</strong>or y la<br />

posición donde se <strong>en</strong>cu<strong>en</strong>tra}<br />

valM<strong>en</strong>or:= v[j];<br />

posM<strong>en</strong>or:= j<br />

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

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

Saved successfully!

Ooh no, something went wrong!