手动堆积数组siftdown

时间:2011-05-11 22:22:49

标签: heap max manual

使用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|

1 个答案:

答案 0 :(得分:0)

正常的做法是:http://en.wikipedia.org/wiki/Heapsort#Pseudocode

从索引N / 2开始(在图中,空间保持为45.)执行siftDOWN。 (根据你的描述,你似乎做了一个siftUP。)如果你开始使用这个图表,你会比较45与它的孩子(48,67)和交换45和67.然后从索引中减去一个(item = 63),并在那里做一个减速。继续,直到你到达根。当您与具有自己子节点的节点交换时,您还需要在该节点上进行大幅下降。

如果您在图中按照此顺序进行操作,则可以看到此模式将检查树中的所有节点。