MODULE Sort; (********************************************************************** * * * A.V.Peterson * * 25 July 1997 * * * * This program reads some integers into an array and then sorts the * * array and prints out the sorted array. * * * ***********************************************************************) FROM InOut IMPORT ReadInt, WriteInt, WriteLn, WriteString, Done; CONST MaxEntries = 20; (* maximum number of index entries allowed *) TYPE IntArray = ARRAY[ 1 .. MaxEntries ] OF INTEGER; VAR Data : IntArray; (* the array to be sorted *) Count : INTEGER; (* the number of actual entries in the array *) (*=================================================================*) PROCEDURE PrintArray( D: IntArray; Count: INTEGER ); (* Print out contents of the array *) VAR i : INTEGER; BEGIN FOR i := 1 TO Count DO WriteInt( i, 2 ); WriteInt( D[i], 6 ); WriteLn END; (*FOR*) WriteLn; END PrintArray; (*====================================================================*) PROCEDURE Swap( VAR A, B : INTEGER ); VAR Temp : INTEGER; BEGIN Temp := A; A := B; B := Temp END Swap; (*====================================================================*) PROCEDURE ReadData( VAR D: IntArray; VAR Count: INTEGER ); (* Read data into D until the array is full or end of file *) VAR Value : INTEGER; BEGIN Count := 0; ReadInt( Value ); WHILE Done AND (Count < MaxEntries) DO INC( Count ); D[ Count ] := Value; ReadInt( Value ); END; (*WHILE*) END ReadData; (*===================================================================*) PROCEDURE SelectionSort(VAR D: IntArray; Count: INTEGER ); (*Selection Sort: order Data from smallest to largest*) VAR Next, Current, Smallest: INTEGER; (*indexes*) BEGIN FOR Next := 1 TO Count-1 DO Smallest := Next; FOR Current := Next+1 TO Count DO IF D[Current] < D[Smallest] THEN Smallest := Current END (*IF*) END; (*FOR Current*) Swap( D[Next], D[Smallest] ); END (*FOR Next*) END SelectionSort; (*====================================================================*) BEGIN (*Sort*) ReadData( Data, Count ); PrintArray( Data, Count ); SelectionSort( Data, Count ); PrintArray( Data, Count ); END Sort. (*===================================================================*)