pascal随机化快排 randomize的问题
写不写randomize?在快排过程里写还是主程序里写比如主程序beginxxxxxxx;randomize;qsort(1.10);end;还是过程procedureq...
写不写 randomize? 在快排过程里写还是主程序里写
比如
主程序
begin
xxxxxxx;
randomize;
qsort(1.10);
end;
还是过程
procedure qsort(l,r:integer);
var m,n,p,q:integer;
begin
randomize;
m:=l;
n:=r;
p:=a[random(r-l+1)+l];
repeat
while a[m]<p do inc(m);
while a[n]>p do dec(n);
if m<=n then begin
q:=a[m];
a[m]:=a[n];
a[n]:=q;
inc(m);
dec(n);
end;
until m>n;
if m<r then qsort(m,r);
if n>l then qsort(l,n);
end;
另外 p:=a[random(r-l+1)+l];写的对不对 展开
比如
主程序
begin
xxxxxxx;
randomize;
qsort(1.10);
end;
还是过程
procedure qsort(l,r:integer);
var m,n,p,q:integer;
begin
randomize;
m:=l;
n:=r;
p:=a[random(r-l+1)+l];
repeat
while a[m]<p do inc(m);
while a[n]>p do dec(n);
if m<=n then begin
q:=a[m];
a[m]:=a[n];
a[n]:=q;
inc(m);
dec(n);
end;
until m>n;
if m<r then qsort(m,r);
if n>l then qsort(l,n);
end;
另外 p:=a[random(r-l+1)+l];写的对不对 展开
3个回答
展开全部
好吧,关于这个问题,高中搞OI的时候,有一次做一套NOIP模拟题,就要用到快排,但是数据有点大,普通的会超时一点点,那么怎么优化呢?老师说加个RANDOMIZE就行了,后来又一次,还是快排,还是超一点点挂,为什么呢?因为有的同学写到过程里了。RANDOMIZE其实就是个随机种子生成,所以在主程序里加一个就可以了,在过程里加,调用太多了,会有细微影响。然后最好还是加一个,不然的话生成的随机数其实不能算真正的随机数,好像是跟系统时间有关系。好久没碰过这些了,有不对的欢迎指正
展开全部
在主程序里用就可以了,randomize只是说明random函数可以用了由于快排是递归算法,用多了其实是会对程序效率造成影响,至于其他错误,我不得而知
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
都可以 不过一般都在主程序里面使用 我没有在过程中使用过
最后一句话是对的
最后一句话是对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询