pascal 的快速排序程序 查错

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:58:02
program wuliao;
const n=10;
var a:array[1..n]of integer;
k,l,m:integer;
procedure qsort(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 i:=i+1;
while x<a[j] do j:=j-1;
if i <=j then
begin
y:=a[i];a[i]:=a[j];a[j]:=y;
i:=i+1;j:=j-1;
end;
until i>j;
if l<j then qsort(l,r);
if i<r then qsort(i,r);
end;
begin
for m:=1 to n do read(a[m]);
qsort(1,n);
for m:=1 to n do write(a[m],' ');
writeln;
end.

不是我写的。但我运行不起来。希望有人能改下
补充:一运行pascal就自动关掉了。 。。..汗颜中。难道要重装了?

听我的
倒数第9行改成
if l<j then qsort(l,j);
就行了
你把右边的弄错了

递归没有终止的边界,pascal当然崩溃了。。。。
while a[i]<x do i:=i+1;
while x<a[j] do j:=j-1;
改成:
while (a[i]<=x) and (i<j) do i:=i+1;
while (a[j]>=x) and (i<j) do i:=i+1;

if i <=j then
begin
y:=a[i];a[i]:=a[j];a[j]:=y;
i:=i+1;j:=j-1;
end;
改成
if i<j then .......