这是DELPHI里面带的快速排序的算法:
procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
 Lo, Hi, Mid, T: Integer;
begin
 Lo := iLo;  //最前面的序列
 Hi := iHi;  //最后面的序列
 Mid := A[round((Lo + Hi) div 2)]; //中间的数值
 repeat
   //找到A[LO]=MID
   while A[Lo] < Mid do Inc(Lo);  //如果最前面的数值小于中间的数值,就增加最前面的序列
   //找到A[HI]=MID
   while A[Hi] > Mid do Dec(Hi);  //如果最后面的数值大于中间的数值,就减少最后面的序列
   if Lo <= Hi then               //如果最前面的序列小于等于最后面的序列
   begin
     //交换两个数
     T := A[Lo];
     A[Lo] := A[Hi];
     A[Hi] := T;
     //最前面的序列加一
     Inc(Lo);
     //最后面的序列减一
     Dec(Hi);
   end;
 until Lo > Hi;  //一直到最前面大于最后面 if Hi > iLo then QuickSort(A, iLo, Hi); //如果最后面的大于ILO ,则递归
 if Lo < iHi then QuickSort(A, Lo, iHi); //如果最前面的小于IHI ,则递归
end;怎么改写成不要参数。直接就是对一个数组排序?谢谢。

解决方案 »

  1.   


    procedure QuickSortA(var A: array of Integer);
    begin
      QuickSort(A,1,length(A));
    end;
      

  2.   

    firetoucher(风焱) :
    谢谢你的回答,我上面的程序里面有个
    REPEAT 
    UNTIL
    在哪里EXIT呢?
      

  3.   

    REPEAT 
    UNTIL
    循环完它就退出来了。
      

  4.   

    当until条件即Lo > Hi;不满足时自然退出,没有用强行退出
      

  5.   

    procedure QuickSort(A: array of Integer);
    var
     Lo, Hi, Mid, T: Integer;
    begin
     Lo := 1;  
     Hi := heigh(a);  
     Mid := A[round((Lo + Hi) div 2)]; 
     repeat
       while A[Lo] < Mid do Inc(Lo);  
       while A[Hi] > Mid do Dec(Hi);  
       if Lo <= Hi then                
       begin
          T := A[Lo];
         A[Lo] := A[Hi];
         A[Hi] := T;
          Inc(Lo);
          Dec(Hi);
       end;
     until Lo > Hi;  
    end;
    这个算法本身有没有问题啊,我执行以后,结果好象还是没有排序啊?
    真的很着急,高手帮帮忙。谢谢。