实在是没办法了。。。。。万望指教
pascal吧
全部回复
仅看楼主
level 1
ysjkejd 楼主
在复习快排的时候突然发现了这个问题,以前从没有出现过的。 好奇怪的样子。以下为主程序。
********************************************
program quicksort ;
var
q,r,i,j,x:longint ;
a:array [1..10000]of longint;
procedure exchange(c,d:integer); // 交换过程
var
k:integer;
begin
k:=c;
c:=d;
d:=k;
end;
function partition(a:array of longint;q,r:longint):longint; //求快排的分隔下标
begin
x:=a [r];
i:=q-1;
for j:=q to r-1 do
if a[j]<=x then
begin
i:=i+1;
exchange(a[j],a[b]);
end;
exchange(a[i+1],a[r]);
partition:=i+1;
end;
procedure qsort(a:array of longint ;q,r:longint); //简单的递归
var
p:longint;
begin
if q<r then
p:=partition(a,q,r);
qsort(a,q,p-1);
qsort(a,p+1,r);
end;
begin //主程序
for i:=1 to 3 do
read(a[i]);
qsort(a[i],1,3);
for i:=1 to 10 do
write(a[i],' ');
end.
*****************************************
用f7找错误的时候提示在这一句
这些错误的原因我都从来没有遇到过啊,这要怎么改啊,改了快1个多小时了。还完全不知道该怎么办。希望大神们教一下啊
2014年07月14日 16点07分 1
level 12
我学的是取中间的数然后把这排数字分两块 定义指针i,j 如果a[i]<基准数就不断的inc(i)【while】a[j]>基准数就不断的dec(j)
until i>j
然后递归
2014年07月14日 21点07分 2
inc是直到a[i]>基准数 同时也找到一个小于基准数的a[j]就交换
2014年07月14日 21点07分
我昨天才刚学。
2014年07月14日 21点07分
回复 陌上_寸草 :嗯,以前我也是那么做的,现在想用递归来做的样子
2014年07月15日 00点07分
我学的也是这种
2014年07月15日 11点07分
level 12
估计是子程序参数表不能有数组?
2014年07月14日 21点07分 3
啊?一直不知道有这个错误
2014年07月15日 00点07分
level 15
看了楼上顺口问句,
lz
的数组在哪里定义的?var还是type?
2014年07月15日 00点07分 4
var里,一开始就是了。以前一直是这么用的,不知道为什么会这个样子
2014年07月15日 00点07分
回复 フ别天神 :。。。我们teacher好像说参数传数组只能用type里的?@千方残光剑41 艾特个神来吧
2014年07月15日 00点07分
回复 asdjklz4 :这样吗,那我赶紧式一下吧
2014年07月15日 01点07分
回复 フ别天神 :我也不确定[乖]
2014年07月15日 01点07分
level 12
1、procedure exchange(c,d:integer); // 交换过程
var
k:integer;
begin
k:=c;
c:=d;
d:=k;
end;
==========================================
你这个只是在过程中交换,过程结束后,原变量还是原来的值
你可以用一个新程序单独试试
2、QSORT的参数你定义的是数组,引用的时候你却用数组元素
,前后不一致
2014年07月15日 03点07分 5
原来如此,我试试吧!
2014年07月15日 03点07分
回复 フ别天神 :果然成功了,万分感谢
2014年07月15日 03点07分
level 5
我只想知道楼主的快排为啥这么长 我们的才30 40行左右
2014年07月16日 01点07分 6
1