procedure RadixSort(var R: TStringList;var aResArr : TDyArray);
const
  cMaxDigit = 4; //处理的最大位数 //0000~9999type
  PBin = ^TBin;       //每个箱子的数据结构
  TBin = record
    rData: Integer;   //数据
    rNext: PBin;      //下一个箱子
    rNo : Integer; //
  end;var
  vBinList: array[0..9] of PBin; //箱子列表
  procedure pAppendBin(mIndex: Integer; mData: Integer); //将数据放到指定位置的箱子中
  var
    vBin: PBin;
    vNo: Integer;
  begin
    vNo := 0;
    if vBinList[mIndex] = nil then    //箱子不存在
    begin
      New(vBinList[mIndex]);
      vBinList[mIndex].rNext := nil;
      vBinList[mIndex].rData := mData;
      vBinList[mIndex].rNo := vNo;
    end
    else
    begin
      vBin := vBinList[mIndex];
      while vBin.rNext <> nil do
      begin
        vBin := vBin.rNext;
        Inc(vNo);
      end;
      Inc(vNo);
      New(vBin.rNext);
      vBin.rNext.rNext := nil;
      vBin.rNext.rData := mData;
      vBin.rNext.rNo := vNo;
    end;
  end;
后绪
  procedure pBinListToArr; //将箱子列表处理成数组
  var
    vPos: Integer;
    vBin: PBin;
    I: Integer;
    iOld : Integer;   //箱子原号
    ArrLen : Integer;
  begin
    ArrLen := R.Count ;
    setlength(aResArr,10); //分配大小
    vPos := 0 ;
    //排序
    for I := 0 to 9 do         //升序
    begin
      vBin := vBinList[I];
      while vBin <> nil do
      begin
        R[vPos] := IntToStr(vBin.rData);
        vBin := vBin.rNext;
        Inc(vPos);
      end;      form1.Memo4.Clear;
      form1.Memo4.Lines.Add(IntToStr(vBinList[I].rNo));  //  Memo4 的值是 0    end;
    for I := 0 to 9 do
    begin
      iOld := vBinList[I].rNo;   //取出当前箱子的原号
      aResArr[iOld] := I;           //将当前的顺序号填入以当前箱子的原号为下标的数组中。
    end;  end;
aResArr 是传入的一个动态数组。用来存排序完成后的下标值。
跟据箱子的编号,来存当前的顺序号。
比如  原 2号箱子 存的是3  排序完成后可能是  排在第  4 位。 
在向aResArr存的时候,以原箱子的箱号为下标,来存 当前的序号 4 
就是 aResArr[2] 的值是 4 .请指教。急盼。