1 (**************************************************)
\r
3 (* ALGORITMOS DE ORDENAMIENTO *)
\r
4 (* ========== == ============ *)
\r
6 (**************************************************)
\r
8 program Ordenamientos;
\r
15 Vector = array [1..MAX] of Dato;
\r
18 (****************************************************
\r
22 ****************************************************)
\r
24 procedure bubbleSort(var v: Vector; { Vector a ordenar }
\r
25 min, { Valor de donde se comienza a ordenar }
\r
26 max: Integer); { Valor en donde se termina de ordenar }
\r
33 for i := max - 1 downto min do
\r
34 for j := min to i do
\r
35 if v[j] > v[j+1] then begin
\r
42 (****************************************************
\r
44 * BUBBLE SORT MEJORADO.
\r
46 ****************************************************)
\r
48 procedure bubbleSortMejor(var v: Vector; { Vector a ordenar }
\r
49 min, { Valor de donde se comienza a ordenar }
\r
50 max: Integer); { Valor en donde se termina de ordenar }
\r
61 for j := min to i do
\r
62 if v[j] > v[j+1] then begin
\r
70 end; { bubbleSortMejor }
\r
72 (****************************************************
\r
74 * SHAKE SORT (o Bubble Sort Bidireccional).
\r
76 ****************************************************)
\r
78 procedure shakeSort(var v: Vector; { Vector a ordenar }
\r
79 min, { Valor de donde se comienza a ordenar }
\r
80 max: Integer); { Valor en donde se termina de ordenar }
\r
83 i, fin, ini, aux, tmp: integer;
\r
91 for i := ini to fin do
\r
92 if v[i] > v[i+1] then begin
\r
99 for i := fin downto ini do
\r
100 if v[i] > v[i+1] then begin
\r
110 (****************************************************
\r
114 ****************************************************)
\r
116 procedure insertionSort(var v: Vector; { Vector a ordenar }
\r
117 min, { Valor de donde se comienza a ordenar }
\r
118 max: Integer); { Valor en donde se termina de ordenar }
\r
127 for i := min + 1 to max do begin
\r
131 while (j >= 1) and huboInt do
\r
132 if v[j] > tmp then begin
\r
139 end; { insertionSort }
\r
141 (****************************************************
\r
145 ****************************************************)
\r
147 procedure quickSort(var v: Vector; { Vector a ordenar }
\r
148 min, { Valor de donde se comienza a ordenar }
\r
149 max: Integer); { Valor en donde se termina de ordenar }
\r
152 ini, fin, medio: integer;
\r
160 medio := (min + max) div 2;
\r
163 while v[ini] < tmp do
\r
165 while v[fin] > tmp do
\r
167 if ini <= fin then begin
\r
168 if ini < fin then begin
\r
178 quickSort(v, min, fin);
\r
180 quickSort(v, ini, max);
\r
183 (****************************************************
\r
187 ****************************************************)
\r
189 procedure Shellsort( var v : Vector; { Vector a ordenar }
\r
190 min, { Valor de donde se comienza a ordenar }
\r
191 max : Integer ); { Valor en donde se termina de ordenar }
\r
194 i, j, medio : Integer;
\r
198 medio := max - min + 1;
\r
199 while medio > 1 do begin
\r
203 medio := trunc( 0.45454 * medio );
\r
204 {*** Do linear insertion sort in steps size d ***}
\r
205 for i := max - medio downto min do begin
\r
209 if tmp > v[j] then begin
\r
210 v[j-medio] := v[j];
\r
220 (************************************************************************)
\r
222 procedure verVector(var v: Vector; s: String);
\r
228 (** MUESTRA VECTOR **)
\r
230 for i := 1 to MAX do
\r
231 write(' | ', v[i]);
\r
237 (************************************************************************)
\r
239 procedure cargarVector(var v: Vector);
\r
245 (** INICIALIZA VECTOR **)
\r
246 for i := 1 to MAX do
\r
247 v[i] := round(random * 100);
\r
248 end; { cargarVector }
\r
251 (************************************************************************)
\r
252 (************************************************************************)
\r
253 (* PROGRAMA PRINCIPAL *)
\r
262 verVector(v, 'Desordenado:');
\r
263 bubbleSort(v, 1, MAX);
\r
264 verVector(v, 'Bubble Sort:');
\r
265 bubbleSortMejor(v, 1, MAX);
\r
266 verVector(v, 'Bubble Sort Mejorado:');
\r
268 shakeSort(v, 1, MAX);
\r
269 verVector(v, 'Shake Sort (Bubble Sort Bidireccional):');
\r
271 insertionSort(v, 1, MAX);
\r
272 verVector(v, 'Insertion Sort:');
\r
274 quickSort(v, 1, MAX);
\r
275 verVector(v, 'Quick Sort:');
\r
277 shellSort(v, 1, MAX);
\r
278 verVector(v, 'Shell''s Sort:');
\r