level 1
ysjkejd
楼主
关于快速排序的一个练习
只学了半年的pascal,所以基础很弱,所以找了很久,也没找出问题。
大概的想法和书上的快速排序的算法估计差不多。。。。但老是报错
主要是想用递归来做
程序如下
万望指教
*********************************************************************************************
var
a:array[1..100] of integer;
n:integer;
procedure p(var r:array of integer;f,l:integer); {程序部分}
var
i,j,k,h,mid:integer;
begin {p}
i:=f; h:=l; mid:=(i+h) div 2; k:=a[mid]; {mid为中间数,k为比较的基准}
repeat
while(i<=mid)and (r[i]<=k) do
inc(i); {找到右到左 ,找一个大于k的数}
while (h>=mid)and (r[h]>=k) do
dec(h); {从左到右找一个小于k的数}
if h>i then {
begin {if}
j:=r[h]; 与排序目标不一致,进行交换
r[h]:=r[i];
r[i]:=j;
end; {if} }
if i<=mid then inc(i); {继续搜索
if h>=mid then dec(h) }
until i=h;
while ((l-h)<>0) and (l>h) do {对基准右部进行递归}
p(r[n],h,l);
while ((i-f)<>0) and (i>f) do {对基准左部进行递归}
p(r[n],f,i);
end; {p}
begin
for n:=1 to 8 do
read(a[n]); {读入数组}
p(a[n],1,8); {调用程序}
for n:=1 to 8 do
write(a[n]:4); {输出}
end.
*******************************************************************************
可以运行,但是读入数组之后,就报错。
exitcode=201
万望指教
感激不尽
2014年05月18日 11点05分
1
只学了半年的pascal,所以基础很弱,所以找了很久,也没找出问题。
大概的想法和书上的快速排序的算法估计差不多。。。。但老是报错
主要是想用递归来做
程序如下
万望指教
*********************************************************************************************
var
a:array[1..100] of integer;
n:integer;
procedure p(var r:array of integer;f,l:integer); {程序部分}
var
i,j,k,h,mid:integer;
begin {p}
i:=f; h:=l; mid:=(i+h) div 2; k:=a[mid]; {mid为中间数,k为比较的基准}
repeat
while(i<=mid)and (r[i]<=k) do
inc(i); {找到右到左 ,找一个大于k的数}
while (h>=mid)and (r[h]>=k) do
dec(h); {从左到右找一个小于k的数}
if h>i then {
begin {if}
j:=r[h]; 与排序目标不一致,进行交换
r[h]:=r[i];
r[i]:=j;
end; {if} }
if i<=mid then inc(i); {继续搜索
if h>=mid then dec(h) }
until i=h;
while ((l-h)<>0) and (l>h) do {对基准右部进行递归}
p(r[n],h,l);
while ((i-f)<>0) and (i>f) do {对基准左部进行递归}
p(r[n],f,i);
end; {p}
begin
for n:=1 to 8 do
read(a[n]); {读入数组}
p(a[n],1,8); {调用程序}
for n:=1 to 8 do
write(a[n]:4); {输出}
end.
*******************************************************************************
可以运行,但是读入数组之后,就报错。
exitcode=201
万望指教
感激不尽