``````{
> I agree... unFortunately the Radix algorithm (which is a
> sophisticated modification of a Distribution Sort algorithm) is
> very Complex, highly CPU dependent and highly data dependent.

We must be speaking of a different Radix Sort.  Is the sort you are
talking about sort numbers on the basis of their digits?

> My understanding is that a Radix sort cannot be implemented in
> Pascal without using a majority of Asm (which means you might as
> well code the whole thing in Asm.)

> assembly) or dig up some working code, I would love to play With it!

************************************************************************
*                                                                      *
* Name : Joy Mukherjee                                                 *
* Date : Mar. 26, 1990                                                 *
* Description : This is the Radix sort implemented in Pascal           *
*                                                                      *
************************************************************************
}

Program SortStuff;

Uses Crt, Dos;

Type
AType = Array [1..400] of Integer;
Ptr   = ^Node;
Node  = Record
Info : Integer;
end;
LType = Array [0..9] of Ptr;

Var
Ran     : AType;
MaxData : Integer;

Procedure ReadData (Var A : AType; Var MaxData : Integer);

Var I : Integer;

begin
MaxData := 400;
For I := 1 to 400 do A [I] := Random (9999);
end;

Procedure WriteArray (A : AType; MaxData : Integer);

Var I : Integer;

begin
For I := 1 to MaxData do
Write (A [I] : 5);
Writeln;
end;

Procedure Insert (Var L : LType; Number, LN : Integer);

Var
P, Q : Ptr;

begin
New (P);
P^.Info := Number;
Q := L [LN];
if Q = Nil then
L [LN] := P
else
begin
end;
end;

Procedure Refill (Var A : AType; Var L : LType);
Var
I, J : Integer;
P    : Ptr;
begin
J := 1;
For I := 0 to 9 do
begin
P := L [I];
While P <> Nil do
begin
A [J] := P^.Info;
J := J + 1;
end;
end;
For I := 0 to 9 do
L [I] := Nil;
end;

Procedure RadixSort (Var A : AType; MaxData : Integer);
Var
L        : LType;
I,
divisor,
ListNo,
Number   : Integer;
begin
For I := 0 to 9 do L [I] := Nil;
divisor := 1;
While divisor <= 1000 do
begin
I := 1;
While I <= MaxData do
begin
Number := A [I];
ListNo := Number div divisor MOD 10;
Insert (L, Number, ListNo);
I := I + 1;
end;
Refill (A, L);
divisor := 10 * divisor;
end;
end;

begin