永发信息网

pascal的快速排序,堆排序的例子(或源代码)

答案:3  悬赏:10  手机版
解决时间 2021-01-28 05:12
  • 提问者网友:听门外雪花风
  • 2021-01-27 11:28
pascal的快速排序,堆排序的例子(或源代码)
最佳答案
  • 五星知识达人网友:人類模型
  • 2021-01-27 12:10
快排
procedure qsort ( l , r : longint );
var
i , j , m , t : longint;
begin
i := l;
j := r;
m := ans [ ( i + j ) div 2 ];
repeat
while ans [ i ] < m do inc ( i );
while ans [ j ] > m do dec ( j );
if i <= j then
begin
t := ans [ i ];
ans [ i ] := ans [ j ];
ans [ j ] := t;
inc ( i );
dec ( j );
end;
until i > j;
if l < j then qsort ( l , j );
if i < r then qsort ( i , r );
end;
堆排:
program duipx;
const n=8;
type arr=array[1..n] of integer;
var a:arr;i:integer;
procedure sift(var a:arr;l,m:integer);
var i,j, t:integer;
begin
i:=l;j:=2*i;t:=a[i];
while j<=m do
begin
if (ja[j+1]) then j:=j+1;
if t>a[j] then begin a[i]:=a[j];i:=j;j:=2*i; end
else exit;
a[i]:=t;
end;
end;

begin
for i:=1 to n do read(a[i]);
for i:=(n div 2) downto 1 do
sift(a,i,n);
for i:=n downto 2 do
begin
write(a[1]:4);
a[1]:=a[i];
sift(a,1,i-1);
end;
writeln(a[1]:4);
end.

顺便给你几个练习题吧
tyvj:P1001 第K极值
P1388中中打丢丢
全部回答
  • 1楼网友:煞尾
  • 2021-01-27 13:58
freepascal中就内置了快排、 在C:\FPC\2.0.4\demo\text里面有个qsort.pp 这个考试的时候可以直接用的、
  • 2楼网友:孤独入客枕
  • 2021-01-27 13:45
procedure kp ( l , r : longint ); var i , j , m , t : longint; begin i := l; j := r; m := ans [ ( i + j ) div 2 ]; repeat while ans [ i ] < m do inc ( i ); while ans [ j ] > m do dec ( j ); if i <= j then begin t := ans [ i ]; ans [ i ] := ans [ j ]; ans [ j ] := t; inc ( i ); dec ( j ); end; until i > j; if l < j then kp ( l , j ); if i < r then kp ( i , r ); end;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯