作为家庭作业问题,我必须从数组中抽出最大堆。问题是:
请绘制存储在以下数组中的max-heap(heapsize为6) A [] = {15,10,8,5,2,7,20,30}
所以,当我尝试这个问题时,我只是采用了老式的方式,并没有考虑到heapSize小于数组大小。
我得到的最大堆是: {30,20,15,10,2,7,8,5}
我的问题是:这是对的吗?此外,既然heapSize小于数组大小,这对生成的最大堆有何影响?我应该只显示最大堆数组直到第6个元素,还是应该修改我的最大堆?
谢谢!
答案 0 :(得分:0)
我认为你误解了这个练习。
如果我们按字面意思进行练习,并且"抽出"从给定数组中得到大小为6的最大堆,我们得到一个这样的树:
15
10 8
5 2 7 20
30
您可以看到数组的前6个元素按堆次序排列。
这也看起来像堆排序的中间状态: 最大值30是最后一个元素,其次是第二大元素20。 如果我们遵循堆排序算法, 用最后一个元素7交换当前最大堆元素15, 等等, 数组最终会按递增顺序排序。
我不知道练习是什么意思"抽出"最大堆, 但我怀疑这意味着堆积数组,这就是你所做的。