早教吧 育儿知识 作业答案 考试题库 百科 知识分享

一组记录的排序码(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为()A)(79,46,56,38,40,84)B)(84,79,56,38,40,46)C)(84,79,56,46,40,38)D)(84,56,79,40,38

题目详情
一组记录的排序码(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为()
A) (79,46,56,38,40,84)
B) (84,79,56,38,40,46)
C) (84,79,56,46,40,38)
D) (84,56,79,40,38,46)
讲一下过程。
▼优质解答
答案和解析
我排序的过程,跟你不一样,不过结果是对的。先把数据构建成最大堆。就是根节点比它的2个子节点要大。
56
50 48
这就市最大堆
你的原数据
46
79 56
38 40 84
84比它的根大,所以84跟56换
46
79 84
38 40 56
38和40都比它的根节点79小,所以不动
然后看第2层,84比46大,所以拿它跟父节点的46换
84
79 46
38 40 56
46换下去还市比它的子节点56小,再换(这个要注意,可能小的被换下来,但是仍然比下面的大,就继续换下去)
84
79 56
38 40 46
目前就已经是最大堆了
然后是堆排序,
拿最上面的84,跟46换,
46
79 56
38 40 【84】
84换好以后再也不能动了,然后再构建剩下的6个数的最大堆:
46
79 56
38 40 【84】
40,38都比79小不动,56比父节点46大,所以换:
56
79 46
38 40 【84】
接下来市79,79比56大,换
79
56 46
38 40 【84】
最大堆完成(84已经不动了,可以不考虑它了),然后79跟最后一个40换,
同样,换了以后,79也不能动,而且以后的排序也不用考虑它
40
56 46
38 【79】 【84】
然后再构建最大堆
38,不动,46跟40换
46
56 40
38 【79】 【84】
然后56跟46换
56
46 40
38 【79】 【84】
又排好了,然后56跟38换
38
46 40
【56】 【79】 【84】
再排序(排序过程不说了),排好如下:
46
40 38
【56】 【79】 【84】
46跟38换
38
40 【46】
【56】 【79】 【84】
再排序:
40
38 【46】
【56】 【79】 【84】
再首尾相换
38
【40】 【46】
【56】 【79】 【84】
结束。
从头开始输出:38 40 46 56 79 84 是最后结果。