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 .请指教。急盼。
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 .请指教。急盼。
MsgBox "此程式已在執行中...!", vbExclamation, App.ProductName
End
End If