博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

快速排序

Posted on 2010-10-20 11:26  桃子在路上  阅读(269)  评论(0编辑  收藏  举报

快速排序是基于分治排序算法,在数据规模很大的情况下一般使用该算法。
   算法主过程如下:

    procedure qsort(L,R:longint);
       var
         i,j,mid,temp:longint;
       begin
           i:=L;
           j:=R;
           mid:=a[L+random(R-L+1)];   {随机选择一个数组中的数作为对比数}
           repeat
              while a[i]< mid do inc(i);    {在左半部分寻找比中间数大的数}
              while mid< a[j] do dec(j);    {在右半部分寻找比中间数小的数}
              if i< =j then     {若找到一组与排序目标不一致的数对则交换它们}
                 begin
                   temp:=a[i];
                   a[i]):=a[j];
                   a[j]:=temp;
                   inc(i);dec(j); {继续找}
                 end;
            until i >j;
            if L< j then qsort(L,j);   {若未到两个数的边界,则递归搜索左右区间}
            if i< R then qsort(i,R);
        end;

    注意:主程序中必须加randomize语句。