no es el ms eficiente, pero es un buen ejemplo y es bastante
sencillo de entender. Lo que hace es leer un arreglo de nmeros enteros. Cada vez que lo lee, va acomodando el nmero mayor al final de la lista. PROGRAM Ordena(input, output); CONST (* Tamao del arreglo *) MaxElts = 50; TYPE (* Tipo de elementos del arreglo *) IntArrType = ARRAY [1..MaxElts] OF Integer; VAR (* Definicin de ndices *) i, j, tmp, size: integer; (* Arreglo de enteros *) arr: IntArrType; (* Lectura del arreglo *) PROCEDURE ReadArr(VAR size: Integer; VAR a: IntArrType); BEGIN size := 1; WHILE NOT eof DO BEGIN readln(a[size]); IF NOT eof THEN size := size + 1 END END; BEGIN (* Lectura *) ReadArr(size, arr); (* Usando el mtodo de la burbuja *) FOR i := size - 1 DOWNTO 1 DO FOR j := 1 TO i DO IF arr[j] > arr[j + 1] THEN BEGIN tmp := arr[j]; arr[j] := arr[j + 1]; arr[j + 1] := tmp; END; (* Imprime en pantalla el resultado *) FOR i := 1 TO size DO writeln(arr[i]) END. Source: Como ves, no son 200 lneas de cdigo. Slo es cosa de echarle un poquito de ingenio.