free pascal 中能调用快速排序吗
6个回答
展开全部
【当然可以】
不过如果数据量大的话,会导致系统堆栈溢出。
所以建议使用随机化快排,方法如下:
在主程序中初始化随机数产生器(Randomize);
在Q_Sort(l,r:longint)中,修改:
procedure Q_Sort(l,r:longint);
var i,j,x:longint;
begin
i:=l;j:=r;
x:=a[random(j-i+1)+i];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if i<r then q_sort(i,r);
if j>l then q_sort(l,j);
end;
这样子避免了普通快排最坏情况的出现(O(n^2)),99%以上的几率可以是最优的情况(O(nlogn))吧..
不过如果数据量大的话,会导致系统堆栈溢出。
所以建议使用随机化快排,方法如下:
在主程序中初始化随机数产生器(Randomize);
在Q_Sort(l,r:longint)中,修改:
procedure Q_Sort(l,r:longint);
var i,j,x:longint;
begin
i:=l;j:=r;
x:=a[random(j-i+1)+i];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if i<r then q_sort(i,r);
if j>l then q_sort(l,j);
end;
这样子避免了普通快排最坏情况的出现(O(n^2)),99%以上的几率可以是最优的情况(O(nlogn))吧..
参考资料: 【贪心策略】
展开全部
你可以直接将pascal安装目录下的快排样例粘贴过来
应该不可以直接调用的
快排的样程目录:
fpc->demo->text->qsort.pp
应该不可以直接调用的
快排的样程目录:
fpc->demo->text->qsort.pp
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能自己写然后调用,不能像C或是C++一样用库函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要自己写好关于快排的代码,在程序里面调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
安装时带有快排标程,但不能调用,只能复制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能啊!需要自定义排序函数,然后直接调用函数就行了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询