70 lines
1.5 KiB
Plaintext
70 lines
1.5 KiB
Plaintext
(* TEST: [-asc -tc] *)
|
|
(* Type definitions *)
|
|
|
|
type string2int: string -> integer
|
|
type intArray: 1 -> integer
|
|
type intArrayXinteger: [ intArray: data; integer: index ]
|
|
type intArrayXinteger2integer: intArrayXinteger -> integer
|
|
type intArray2Boolean: intArray -> Boolean
|
|
|
|
|
|
(* Function declarations
|
|
They use the above type definitions
|
|
*)
|
|
function indexOfSmallest: intArrayXinteger2integer
|
|
function selectionSort: intArray2Boolean
|
|
function entry : string2int
|
|
|
|
(* indexOfSmallest *)
|
|
indexOfSmallest (* as *) (data, startingIndex) := {
|
|
[ integer: indexOfSmallestSoFar; integer: i ]
|
|
indexOfSmallestSoFar := startingIndex;
|
|
i := 0 ;
|
|
while (i < data._1 ) {
|
|
if ( data(i) < data(indexOfSmallestSoFar) )
|
|
then {
|
|
indexOfSmallestSoFar := i;
|
|
}
|
|
else {
|
|
i := i;
|
|
}
|
|
i := i + 1;
|
|
}
|
|
return indexOfSmallestSoFar;
|
|
}
|
|
|
|
|
|
(* selectionSort *)
|
|
selectionSort(data) := {
|
|
[ integer: i ]
|
|
i := 0 ;
|
|
while (i < data._1 ) {
|
|
[ integer: index; integer: temp ]
|
|
index := indexOfSmallest(data,i);
|
|
temp := data(index);
|
|
data(index) := data(i);
|
|
data(i) := temp;
|
|
i := i + 1;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
(* Function definition
|
|
entry is the first function called
|
|
*)
|
|
entry(arg) := {
|
|
[ intArray: data; Boolean: _ ]
|
|
data := reserve data(8);
|
|
data(0) := 60;
|
|
data(1) := 80;
|
|
data(2) := 10;
|
|
data(3) := 50;
|
|
data(4) := 30;
|
|
data(5) := 40;
|
|
data(6) := 20;
|
|
data(7) := 70;
|
|
_ := selectionSort(data);
|
|
return 0;
|
|
}
|