已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列问题:1.根据以上序列建立一个堆(画出第一步和最后堆得结果图),希望先输出最小值.2.输出最小值后,如何得到次小值(并
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 16:38:36
已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列问题:1.根据以上序列建立一个堆(画出第一步和最后堆得结果图),希望先输出最小值.2.输出最小值后,如何得到次小值(并
已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列问题:
1.根据以上序列建立一个堆(画出第一步和最后堆得结果图),希望先输出最小值.
2.输出最小值后,如何得到次小值(并画出相应结果图)
已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列问题:1.根据以上序列建立一个堆(画出第一步和最后堆得结果图),希望先输出最小值.2.输出最小值后,如何得到次小值(并
pascal语言:
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] 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.
C语言:
#include
void heapsort(int a[],int l,int m)
{
int i,j,t;
i=l;
t=a[i];
j=i*2;
while(ja[j])
{
a[i]=a[j];
i=j;
j=i*2;
}
else
{
break;
}
a[i]=t;
}
}
int main()
{
int i,n;
scanf("%d",&n);
int a[n];
for(i=1;i=1;i--)
heapsort(a,i,n);
for(i=n;i>=2;i--)
{
printf("%d\n",a[1]);
a[1]=a[i];
heapsort(a,1,i-1);
}
printf("%d\n",a[1]);
system("pause");
return 0;
}