使用siftdown进行数组堆积 - max(堆) 这是交换45与77的结果,我对下一步感兴趣,是37交换77或45与67交换,考虑到这种情况是通过45交换77完成,我看了1级(0级是37),我需要回到45和67来修复情况还是应该继续提高然后修复底部数字?哪个操作首先在计算机实现中完成?
|37|
|77| |59|
|63| |45| |54| |11|
|31| |39| |48| |67|
答案 0 :(得分:0)
正常的做法是:http://en.wikipedia.org/wiki/Heapsort#Pseudocode。
从索引N / 2开始(在图中,空间保持为45.)执行siftDOWN。 (根据你的描述,你似乎做了一个siftUP。)如果你开始使用这个图表,你会比较45与它的孩子(48,67)和交换45和67.然后从索引中减去一个(item = 63),并在那里做一个减速。继续,直到你到达根。当您与具有自己子节点的节点交换时,您还需要在该节点上进行大幅下降。
如果您在图中按照此顺序进行操作,则可以看到此模式将检查树中的所有节点。