展开全部
ls 是冒泡吧?没见过这样的快排.....
真正的快排应该是这样的(假设被排序的数组是a,且快排后按升序排列):
procedure qsort(l,h:integer);
var
i,j,t,m:integer;
begin
i:=l; j:=h;
m:=a[(i+j) div 2]; //注意:本句不能写成:m:=(i+j) div 2;
repeat
while a[i]<m then inc(i);
while m<a[j] then dec(j); //降序把这个'<'换成‘>';
if i<=j then //注意,是’<=';
begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;
until i>j; //注意,是大于号,不是‘>=’;
if i<h then qsort(i,h);
if j>l then qsort(l,j); //这两行是递归寻找;
end;
在主程序中调用 qsort 过程既可。请采纳!
真正的快排应该是这样的(假设被排序的数组是a,且快排后按升序排列):
procedure qsort(l,h:integer);
var
i,j,t,m:integer;
begin
i:=l; j:=h;
m:=a[(i+j) div 2]; //注意:本句不能写成:m:=(i+j) div 2;
repeat
while a[i]<m then inc(i);
while m<a[j] then dec(j); //降序把这个'<'换成‘>';
if i<=j then //注意,是’<=';
begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;
until i>j; //注意,是大于号,不是‘>=’;
if i<h then qsort(i,h);
if j>l then qsort(l,j); //这两行是递归寻找;
end;
在主程序中调用 qsort 过程既可。请采纳!
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
展开全部
var
n,t,i:integer;
a:array[1..100000] of integer;//这边a数组是用来存读入、输出的数的,可以根据题目要求来改,其他变量的大小也可以根据题目要求来改,只要类型不错就可以了。
procedure kp(l,r:integer);
var
i,j,m:integer;
begin
i:=l;j:=r;m:=a[random(r-l)+1];//这边“m:=a[random(r-l)+1];”我是用了随机快排,还可以用“m:=a[(l+r) div 2];”取中快排、“m:=a[l];”普通快排,一般来说,效率随机快排>取中快排>普通快排。
repeat
while a[i]<m do inc(i);
while a[j]>m do dec(j);
if i<j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
inc(i);dec(j);//本来书里这两句话是放在if语句里面的,再把if里的条件改成“i<=j”。
until i>j;
if j>l then kp(l,j);
if i<r then kp(i,r);
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
kp(1,n);
for i:=1 to n-1 do write(a[i],' ');
writeln(a[n]);
end.
n,t,i:integer;
a:array[1..100000] of integer;//这边a数组是用来存读入、输出的数的,可以根据题目要求来改,其他变量的大小也可以根据题目要求来改,只要类型不错就可以了。
procedure kp(l,r:integer);
var
i,j,m:integer;
begin
i:=l;j:=r;m:=a[random(r-l)+1];//这边“m:=a[random(r-l)+1];”我是用了随机快排,还可以用“m:=a[(l+r) div 2];”取中快排、“m:=a[l];”普通快排,一般来说,效率随机快排>取中快排>普通快排。
repeat
while a[i]<m do inc(i);
while a[j]>m do dec(j);
if i<j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
inc(i);dec(j);//本来书里这两句话是放在if语句里面的,再把if里的条件改成“i<=j”。
until i>j;
if j>l then kp(l,j);
if i<r then kp(i,r);
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
kp(1,n);
for i:=1 to n-1 do write(a[i],' ');
writeln(a[n]);
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用的是FPC吗?
fpc/demo/text/qsort.pp的sort过程是标准的快排
fpc/demo/text/qsort.pp的sort过程是标准的快排
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2018-04-13
引用只爱两个M的回答:
ls 是冒泡吧?没见过这样的快排.....
真正的快排应该是这样的(假设被排序的数组是a,且快排后按升序排列):
procedure qsort(l,h:integer);
var
i,j,t,m:integer;
begin
i:=l; j:=h;
m:=a[(i+j) div 2]; //注意:本句不能写成:m:=(i+j) div 2;
repeat
while a[i]<m then inc(i);
while m<a[j] then dec(j); //降序把这个'<'换成‘>';
if i<=j then //注意,是’<=';
begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;
until i>j; //注意,是大于号,不是‘>=’;
if i<h then qsort(i,h);
if j>l then qsort(l,j); //这两行是递归寻找;
end;
在主程序中调用 qsort 过程既可。请采纳!
ls 是冒泡吧?没见过这样的快排.....
真正的快排应该是这样的(假设被排序的数组是a,且快排后按升序排列):
procedure qsort(l,h:integer);
var
i,j,t,m:integer;
begin
i:=l; j:=h;
m:=a[(i+j) div 2]; //注意:本句不能写成:m:=(i+j) div 2;
repeat
while a[i]<m then inc(i);
while m<a[j] then dec(j); //降序把这个'<'换成‘>';
if i<=j then //注意,是’<=';
begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;
until i>j; //注意,是大于号,不是‘>=’;
if i<h then qsort(i,h);
if j>l then qsort(l,j); //这两行是递归寻找;
end;
在主程序中调用 qsort 过程既可。请采纳!
展开全部
while 后面应该用 do
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假设数组a中有k个元素按升序排列:
for t:=1 to k-1 do
for i:=1 to k-1 do
if a[i]>a[i+1] then
begin
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;
假设数组a中有k个元素按降序排列:
for t:=1 to k-1 do
for i:=1 to k-1 do
if a[i]<a[i+1] then
begin
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;
函数名等楼主就自己加吧
for t:=1 to k-1 do
for i:=1 to k-1 do
if a[i]>a[i+1] then
begin
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;
假设数组a中有k个元素按降序排列:
for t:=1 to k-1 do
for i:=1 to k-1 do
if a[i]<a[i+1] then
begin
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;
函数名等楼主就自己加吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询