求助,这个pascal快速排序有什么问题?

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:19:18
program quicksort1;
var n,k:longint;
a:array[1..10000] of longint;
procedure qsort(l,r:longint);
var i,j,p,q:longint;
begin
i:=l;
j:=r;
p:=(l+r) div 2;
repeat
while a[i]<a[p] do i:=i+1;
while a[j]>a[p] do j:=j-1;
if i<=j then begin
q:=a[i];a[i]:=a[j];a[j]:=q;i:=i+1;j:=j-1;
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;
begin
assign(input,'quicksort1.in');
assign(output,'quicksort1.out');
reset(input);
rewrite(output);
readln(n);
for k:=1 to n do readln(a[k]);
qsort(1,n);
for k:=1 to n do writeln(a[k]);
close(input);
close(output);
end.

不知道为什么这个程序排出来的数顺序有一些问题 求助!!!谢谢!!

program quicksort1;
var n,k:longint;
a:array[1..10000] of longint;

procedure qsort(l,r:longint);
var i,j,p,q:longint;
begin
i:=l;
j:=r;
p:=a[(l+r) div 2]; {注意!p是一个不变标准值,而不是一个位置}
repeat
while a[i]<p do inc(i);{相应的,这儿也要改;同时我用inc和dec代替了原来的+1-1操作,因为理论上来说这样会更快}
while a[j]>p do dec(j);
if i<=j then begin
q:=a[i];
a[i]:=a[j];
a[j]:=q;
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);{这里可以这样写}
if i<r then qsort(i,r);
end;

begin
assign(input,'quicksort1.in');
assign(output,'quicksort1.out');
reset(input);
rewrite(output);
readln(n);
for k:=1 to n do readln(a[k]);
qsort(1,n);
for k:=1 to n do writeln(a[k]);
close(input);
close(output);
end.

我参加了多次比赛,快排都这样打,没有错过

第9行改为:
p