////数组排序
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;

解决方案 »

  1.   

    showmessage(inttostr(cntary[order[0]])); 
    应该是489,而显示的是451
      

  2.   

    你的
    showmessage(inttostr(cntary[order[0]])); 
    有问题。cntary已经是排序过的了,cntary[0]就是489order数组是用来记录原来位置的。
      

  3.   

    排序的结果是对的,不过你显示的结果不对procedure TForm1.Button1Click(Sender: TObject);
    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;