procedure  Sort(var  A:  TListbox);  
   procedure  QuickSort(var  A:  TListbox;  iLo,  iHi:  Integer);  
   var  
       Lo,  Hi:  Integer;  
       Mid,  T:  string;  
   begin  
       Lo  :=  iLo;  
       Hi  :=  iHi;  
       Mid  :=  A.Items.Strings[(Lo  +  Hi)  div  2];  
       repeat  
           while  A.Items.Strings[Lo]  <  Mid  do  Inc(Lo);  
           while  A.Items.Strings[Hi]  >  Mid  do  Dec(Hi);  
           if  Lo  <=  Hi  then  
           begin  
               T  :=  A.Items.Strings[Lo];  
               A.Items.Strings[Lo]  :=  A.Items.Strings[Hi];  
               A.Items.Strings[Hi]  :=  T;  
               Inc(Lo);  
               Dec(Hi);  
           end;  
       until  Lo  >  Hi;  
       if  Hi  >  iLo  then  QuickSort(A,  iLo,  Hi);  
       if  Lo  <  iHi  then  QuickSort(A,  Lo,  iHi);  
   end;  
begin  
   if  A.Count>1  then  
   begin  
           QuickSort(A,  0,  A.Count-1);  
   end;  
end;  
这个自己修改的正序的,不会倒序,帮忙改下。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i:Integer ;
    begin
      for  i:=ListBox1.Items.Count-1 downto 0 do
      begin
        ListBox2.Items.Add(ListBox1.Items.Strings[i]);
      end;
    end;
      

  2.   

    把  ListBox1.Sorted :=True; ListBox2再把ListBox1.Items.Strings[i])倒序取出来就成了``~
      

  3.   

    to ron_xin(星雨): 
      ListBox1.Sorted :=True
    就是我上面的代码,参考delphi自带的快速排序源代码改的,
     倒序 数据多的话,先把他们排序,再一个一个倒来过弄,速度太慢
      

  4.   

    其实楼上的已经很简单了三,
    我帮你改一下那个排序吧。
    procedure  Sort(var  A:  TListbox);
       procedure  QuickSort(var  A:  TListbox;  iLo,  iHi:  Integer);
       var
           Lo,  Hi:  Integer;
           Mid,  T:  string;
       begin
           Lo  :=  iLo;
           Hi  :=  iHi;
           Mid  :=  A.Items.Strings[(Lo  +  Hi)  div  2];
           repeat
               while  A.Items.Strings[Lo]  >  Mid  do  Inc(Lo);
               while  A.Items.Strings[Hi]  <  Mid  do  Dec(Hi);
               if  Lo  <=  Hi  then
               begin
                   T  :=  A.Items.Strings[Hi];
                   A.Items.Strings[Hi]  :=  A.Items.Strings[Lo];
                   A.Items.Strings[Lo]  :=  T;
                   Inc(Lo);
                   Dec(Hi);
               end;
           until  Lo  >  Hi;
           if  Hi  >  iLo  then  QuickSort(A,  iLo,  Hi);
           if  Lo  <  iHi  then  QuickSort(A,  Lo,  iHi);
       end;
    begin
       if  A.Count>1  then
       begin
               QuickSort(A,  0,  A.Count-1);
       end;
    end;