快速排序是基于分治排序算法,在数据规模很大的情况下一般使用该算法。
算法主过程如下:
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语句。