PROCEDURE Sort(VAR items: Items; min, max: INTEGER;
nofitems: INTEGER);
VAR
myitems: Items; (* local copy of items *)
count: ARRAY maxintervallen OF INTEGER;
i, j: INTEGER; (* indices of items and myitems *)
BEGIN
(* D1 *)
i := 0;
WHILE i < max - min + 1 DO
count[i] := 0; INC(i);
END;
(* make local copy of items *)
myitems := items;
(* D2/D3 *)
i := 0;
WHILE i < nofitems DO
INC(count[myitems[i] - min]); INC(i);
END;
(* D4 *)
i := 1;
WHILE i < max - min + 1 DO
INC(count[i], count[i-1]); INC(i);
END;
(* D5/D6 *)
j := nofitems-1;
WHILE j >= 0 DO
i := count[myitems[j] - min];
items[i-1] := myitems[j];
DEC(count[myitems[j] - min]);
DEC(j);
END;
END Sort;
|