现在的位置: 首页 > 综合 > 正文

急,数组1排序后->数组2,求算法!3Q

2012年05月03日 ⁄ 综合 ⁄ 共 1769字 ⁄ 字号 评论关闭
急,数组1排序后->数组2,求算法!3Q Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061215205531143.html
数组1排序,同时将数组1排序前的序号值按排序后的顺序存入数组2,求一简单算法(代码少优先,速度其次)  
  例:  
   
  A[0]=4  
  A[1]=5  
  A[2]=3   ...  
   
  A[1]最大,A[0]第二,A[2]第三  
  则取A的原序号->B  
   
  B[0]=1  
  B[1]=0  
  B[2]=2...  
   
  3q~  
 

在线等ing~

没看动啥意思  
   
  如果只是排序,DELPHI自带的关于线程的DEMO中有排序算法。

.......就是  
  A[0]=4  
  A[1]=5  
  A[2]=3   ...  
  可见:  
  A[1]最大,其序号A[i]的i=1  
  A[0]第二,其序号A[i]的i=0  
  A[2]第三,   其序号A[i]的i=2  
  所以:  
  要求获得:  
  B[0]=1  
  B[1]=0  
  B[2]=2...

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      Ttest=record  
          data   :   Integer;  
          index   :   Integer;  
      end;  
      TForm1   =   class(TForm)  
          Memo1:   TMemo;  
          Button1:   TButton;  
          Memo2:   TMemo;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      fArray   :   array[0..5]   of   Ttest;  
      i,j   :   integer;  
      t   :   Ttest   ;  
  begin  
        Randomize;  
        //初始化一个数组  
        for   i:=   0   to   5   do  
        begin  
            fArray[i].data   :=   Random(100);  
            fArray[i].index   :=   i;  
            Memo1.Lines.Add(Format('数据:%d;序号:%d',[fArray[i].data,fArray[i].index]));  
        end;  
   
        //排序  
            for   I   :=   High(fArray)   downto   Low(fArray)   do  
          for   J   :=   Low(fArray)   to   High(fArray)   -   1   do  
              if   fArray[J].data   >   fArray[J   +   1].data   then  
              begin  
                  T   :=   fArray[J];  
                  fArray[J]   :=   fArray[J   +   1];  
                  fArray[J   +   1]   :=   T;  
              end;  
   
          //显示结果  
        for   i:=   0   to   5   do  
            Memo2.Lines.Add(Format('数据:%d;序号:%d',[fArray[i].data,fArray[i].index]))  
   
  end;  
   
  end.  
 

靠,反了,我是按照从小到大排序的,你调整一下就可以了。

就是要这个效果!!我郁闷了1天啊!!!!万万分感谢!!!!!!!;  
  3Q3Q3Q3Q;

抱歉!评论已关闭.