pascal的快速排序,堆排序的例子(或源代码)
3个回答
展开全部
快排
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 (j<m) and (a[j]>a[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中中仿返打丢丢
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 (j<m) and (a[j]>a[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中中仿返打丢丢
展开全部
freepascal中就内岩吵置了快排、
在亏厅C:\FPC\2.0.4\销枣隐demo\text里面有个qsort.pp
这个考试的时候可以直接用的、
在亏厅C:\FPC\2.0.4\销枣隐demo\text里面有个qsort.pp
这个考试的时候可以直接用的、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
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;
追问
还有堆排啊
追答
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 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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询