
数据结构的堆排序和初始堆的概念...我被搞懵了...他们有什么不同..
比如说(46,79,56,38,40,84)它的初始堆是什么,堆排序后又是什么,最好给个排序的过程...thanks...
比如说(46,79,56,38,40,84)它的初始堆是什么,堆排序后又是什么,最好给个排序的过程...thanks
展开
5个回答
展开全部
我说的是最大堆(即从大到小排)
初始堆即最大的元素在第一个,其他元素任意排(但是满足父节点大于子节点)
var i,n:longint;
a:array[1..1000] of longint;
procedure ex(var x,y:longint);
var k:longint;
begin
k:=x;x:=y;y:=k;
end;
procedure down(i,l:longint);
var t:longint;
begin
t:=i*2;
while t<=l do
begin
if (t<l)and(a[t+1]>a[t]) then inc(t);
if a[t]>a[i] then
begin
ex(a[t],a[i]);
i:=t;t:=i*2;
end
else break;
end;
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln;
for i:=n div 2 downto 1 do down(i,n);
for i:=n downto 2 do
begin
write(a[1],' ');
a[1]:=a[i];
down(1,i-1);
end;
writeln(a[1]);
end.
初始堆即最大的元素在第一个,其他元素任意排(但是满足父节点大于子节点)
var i,n:longint;
a:array[1..1000] of longint;
procedure ex(var x,y:longint);
var k:longint;
begin
k:=x;x:=y;y:=k;
end;
procedure down(i,l:longint);
var t:longint;
begin
t:=i*2;
while t<=l do
begin
if (t<l)and(a[t+1]>a[t]) then inc(t);
if a[t]>a[i] then
begin
ex(a[t],a[i]);
i:=t;t:=i*2;
end
else break;
end;
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln;
for i:=n div 2 downto 1 do down(i,n);
for i:=n downto 2 do
begin
write(a[1],' ');
a[1]:=a[i];
down(1,i-1);
end;
writeln(a[1]);
end.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
初始堆是空的,要把数据建进去的。
看看书或网上搜索一下
看看书或网上搜索一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看书或网上搜索一下就可以了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
,,,,,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
初建堆是按照第一次排序完成“取出堆顶元素”步骤 得到初始堆
初始堆就像一个完全二叉树一样,根部就是数组中最大或最小的元素
我们从初始堆的取出堆顶并输出,
然后将最后一个结点抽取到顶部 ,再完成“取出堆顶元素”步骤, 生成新的初始堆
再从初始堆的取出堆顶并输出
以此循环到数组全部元素都取出
初始堆就像一个完全二叉树一样,根部就是数组中最大或最小的元素
我们从初始堆的取出堆顶并输出,
然后将最后一个结点抽取到顶部 ,再完成“取出堆顶元素”步骤, 生成新的初始堆
再从初始堆的取出堆顶并输出
以此循环到数组全部元素都取出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询