////数组排序
procedure orderInAry2(var icnt:array of integer;var order:array of integer);
var
n,k,iTemp,iTemp2:integer;
begin
for k:=low(order) to high(order) do
order[k]:=k;
for k:=low(order) to high(order) do
for n:=k+1 to high(order) do
if iCnt[n]>iCnt[k] then
begin
iTemp:=iCnt[n];
iCnt[n]:=iCnt[k];
iCnt[k]:=iTemp;
iTemp2:=order[n];
order[n]:=order[k];
order[k]:=iTemp2;
end;
end;
以下是求数组排序:但显示结果不对:
var
i,g,t:integer;
order:Array of integer;
cntary:Array of integer;
begin
setlength(cntary,7);
cntary[0]:=472;
cntary[1]:=451;
cntary[2]:=451;
cntary[3]:=489;
cntary[4]:=451;
cntary[5]:=451;
cntary[6]:=481;
setlength(order,7);
orderinary2(cntary,order);
showmessage(inttostr(cntary[order[0]]));
end;
procedure orderInAry2(var icnt:array of integer;var order:array of integer);
var
n,k,iTemp,iTemp2:integer;
begin
for k:=low(order) to high(order) do
order[k]:=k;
for k:=low(order) to high(order) do
for n:=k+1 to high(order) do
if iCnt[n]>iCnt[k] then
begin
iTemp:=iCnt[n];
iCnt[n]:=iCnt[k];
iCnt[k]:=iTemp;
iTemp2:=order[n];
order[n]:=order[k];
order[k]:=iTemp2;
end;
end;
以下是求数组排序:但显示结果不对:
var
i,g,t:integer;
order:Array of integer;
cntary:Array of integer;
begin
setlength(cntary,7);
cntary[0]:=472;
cntary[1]:=451;
cntary[2]:=451;
cntary[3]:=489;
cntary[4]:=451;
cntary[5]:=451;
cntary[6]:=481;
setlength(order,7);
orderinary2(cntary,order);
showmessage(inttostr(cntary[order[0]]));
end;
应该是489,而显示的是451
showmessage(inttostr(cntary[order[0]]));
有问题。cntary已经是排序过的了,cntary[0]就是489order数组是用来记录原来位置的。
var
i,g,t:integer;
order:Array of integer;
cntary:Array of integer;
begin
setlength(cntary,7);
cntary[0]:=472;
cntary[1]:=451;
cntary[2]:=451;
cntary[3]:=489;
cntary[4]:=451;
cntary[5]:=451;
cntary[6]:=481;
setlength(order,7);
orderinary2(cntary,order);
for i:=0 to 6 do
//memo1.Lines.Add(inttostr(cntary[order[i]]));
memo1.Lines.Add(inttostr(cntary[i]));
end;