初始堆的问题

msydd2006 2009-06-23 06:04:02
对整数序列(7,4,19,3,9,2)作从小到大的堆排序,堆序列算法首先对该序列构造初始堆,所构造的初始堆是?
a 19,9,7,4,3,2
b 19,9,7,4,2,3
c 19,9,7,3,4,2
d 19,4,7,9,3,2

答案是 c

哪位大侠高告诉高速我这个答案是怎么得出来的? 具体的过程是什么样的。谢谢
...全文
240 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
b12812205 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
按顺序将序列里的数插入到堆里:
1、插入7
2、插入4到7的左儿子
3、插入19到7的右儿子,由于19大于7,交换19与7
4、插入3到4的左儿子
5、插入9到4的右儿子,9大于4,交换9与4
6、插入2到7的左儿子
最终得到结果:19 9 7 3 4 2
lz可以画图理解下
[/Quote]

虽然结果偶然碰对,但是初始堆的形成不是在原始插入的过程中调整出的,而是先不管是否满足堆的性质,先构造出一个完全二叉树,然后从第一个非叶子节点开始调整堆,策略就是找到本节点、左子节点、右子节点中最大的一个放在本结点的位置上。
过程如下:
(7,4,19,3,9,2)
(7,9,19,3,4,2)由上对换9和4
(19,9,7,3,4,2)由上对换7和19
b12812205 2012-09-28
  • 打赏
  • 举报
回复
错了你弄得不对
天地一棵树 2009-06-23
  • 打赏
  • 举报
回复
先把这些数字放在一个二叉树里,然后按照建堆的方式建就行了
Walf_ghoul 2009-06-23
  • 打赏
  • 举报
回复
按顺序将序列里的数插入到堆里:
1、插入7
2、插入4到7的左儿子
3、插入19到7的右儿子,由于19大于7,交换19与7
4、插入3到4的左儿子
5、插入9到4的右儿子,9大于4,交换9与4
6、插入2到7的左儿子
最终得到结果:19 9 7 3 4 2
lz可以画图理解下
wjksd 2009-06-23
  • 打赏
  • 举报
回复
按顺序写个二叉树,之后调整大顶堆就可以了,
题应该没错吧,最终等到的是从小到大的排序,是应该建大顶堆得,楼上几个看看数据结构吧
liyanhong5201314 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liao05050075 的回复:]
题目出错了吧?
从小到大的堆排序?
怎么会是大顶堆?
[/Quote]

up
liyanhong5201314 2009-06-23
  • 打赏
  • 举报
回复
从不同的节点堆化 得出的结果不一样

所以我觉得 a, b, c 都是对的



说错了 请指教。
woods2001 2009-06-23
  • 打赏
  • 举报
回复
这是一个大顶堆
楼主最好吧数据结构好好看看
这种题目一看也就知道了
确实没必要拿在这里问
liao05050075 2009-06-23
  • 打赏
  • 举报
回复
题目出错了吧?
从小到大的堆排序?
怎么会是大顶堆?
ware_soft 2009-06-23
  • 打赏
  • 举报
回复
不明白。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧