pascal快速排序

来源:百度知道 编辑:UC知道 时间:2024/06/15 11:28:09
不要有这句话的x:=a[(l+r) div 2]; 刚学,

procedure paixu(i,j:longint);
var x,i1,j1:longint;
begin
i1:=i;x:=a[i];j1:=j;
while i1<>j1 do
begin
while (i1<>j1)and(a[j1]>x) do j1:=j1-1;
if (i1<>j1)then begin a[i1]:=a[j1]; i1:=i1+1 end;
while (i1<>j1)and(a[i1]<x) do i1:=i1+1;
if (i1<>j1) then begin a[j1]:=a[i1];j1:=j1-1 end;
end;
a[i1]:=x;
if i1-i>=2 then paixu(i,i1-1);
if j-i1>=2 then paixu(i1+1,j);
end;
有不懂的告诉哈

x:=a[(l+r) div 2];
div是整除,就是只保留商,余数省去,不四舍五入。
m div n就是trunc(m/n)

procedure sort(l,r:integer);
var
i,j,x,y:integer;
begin
i:=l;
j:=r;
x:=a[(l+r) div 2];
repeat
while a[i]<x do inc(i);
while x<a[j] do dec(j);
if i<=j then begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if i