pascal 快排标程的祥解

来源:百度知道 编辑:UC知道 时间:2024/07/07 20:33:18

原理:把数组分成两边,使左边的数总是小于右边的,再分别排序(好像是分治....)
procdure sort(l,r:longint);
var
i,j,x,y:longint;
begin
i:=l;j:=r;x:=a[(i+j) shr 1];
{shr 1就是 div 2,x似乎只是用来比较的}
repeat
while a[i]<x do inc(i);
{在左边找一个比x大的数}
while x<a[j] do dec(j);
{在右边找一个比x小的数}
if not(i>j) then begin
y:=a[i];a[i]:=a[j];a[j]:=i;
{把较小的数换到左边}
inc(i);dec(j);
end;
until i>j;
{repeat {循环后保证有a[i]左边的数都比右边的小}
if l<j then sort(l,j);
if i<r then sort(i,r);
{递归继续排}
end;

[这个程序是Pascal自带的,根据自己的理解写了几句说明。原来学快排的时候好像讲的不是这个程序,不过因为对这个太熟悉了就没记那个了....]

原理:把数组分成两边,使左边的数总是小于右边的,再分别排序(好像是分治....)
procdure sort(l,r:longint);
var
i,j,x,y:longint;
begin
i:=l;j:=r;x:=a[(i+j) shr 1];
{shr 1就是 div 2,x似乎只是用来比较的}
repeat