## Код:
```
PROCEDURE Sort (VAR array: ARRAY OF INTEGER; VAR time: REAL);
      VAR
         min, max, len: INTEGER;
         i, j, k, x: INTEGER;
         b: POINTER TO ARRAY OF INTEGER;
         t: REAL;
   BEGIN
      StdLog.String("n = "); StdLog.Int(LEN(array)); StdLog.Ln;
      U.StartTimer(time);
      U.StartTimer(t);
      min := array[0]; max := array[0];
      FOR i := 0 TO LEN(array) - 1 DO
         x := array[i];
         IF x < min THEN min := x ELSIF x > max THEN max := x END
      END;
      len := max - min + 1;
      U.StopTimer(t); U.PrintTime(t); StdLog.Ln;
      StdLog.String("k = "); StdLog.Int(len); StdLog.Ln;
      U.StartTimer(t); 
      NEW(b, len);
      U.StopTimer(t); U.PrintTime(t); StdLog.Ln;
      U.StartTimer(t);
      FOR i := 0 TO LEN(array) - 1 DO
         INC(b[array[i] - min])
      END;
      U.StopTimer(t); U.PrintTime(t); StdLog.Ln;
      U.StartTimer(t);
      j := 0;
      FOR i := min TO max DO
         k := b[i - min];
         WHILE k > 0 DO
            array[j] := i; INC(j); DEC(k)
         END
      END;
      U.StopTimer(t); U.PrintTime(t); StdLog.Ln;
      U.StopTimer(time)
   END Sort;
```
