program Bucketsort;

{ Bucketsort zur Sortierung von Integerzahlen in einem bestimmten Intervall. }

const
   TableSize = 20;

var
   Table  : Array[1..TableSize] of Byte;
   Bucket : Array[0..255] of LongInt;
   Index  : LongInt;

procedure BuckSort;
var
   Index     : LongInt;
   BuckIndex : LongInt;
begin
   for BuckIndex := 0 to 255 do Bucket[BuckIndex] := 0;
   for Index := 1 to TableSize do
      Inc(Bucket[Table[Index]]);
   Index := 1;
   BuckIndex := 0;
   while Index <= TableSize do
   begin
      while Bucket[BuckIndex] = 0 do
	 Inc(BuckIndex);
      Table[Index] := BuckIndex;
      Dec(Bucket[BuckIndex]);
      Inc(Index);
   end;
end;

begin
   Randomize;
   for Index := 1 to TableSize do
   begin
      Table[Index] := Random(256);
      Write(Table[Index]:2,' ');
   end;
   Writeln;
   BuckSort;
   for Index := 1 to TableSize do
      Write(Table[Index]:2,' ');
   Writeln;
end.
