数组siftdown的手动堆积

问题描述:

使用siftdown的数组堆积 - max(堆) 这是45与77交换的结果,我对下一步感兴趣,是37交换77还是45交换67,考虑到这个情况是通过与77交换45来完成的,我看着1级(0级是37),我是否需要回到45和67解决问题,还是应该继续提高,然后确定底部数字?哪个操作在计算机实现中首先完成?数组siftdown的手动堆积

      |37| 
      |77|        |59| 
    |63|    |45|    |54|   |11| 
|31| |39|  |48| |67| 

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

从索引N/2开始(在图中,容纳45的空间)。做一个筛选。 (从你的描述看,你做了一次筛查。)如果你从这张图开始,你将比较45到它的孩子(48,67)和交换45和67.然后从索引中减去一个(item = 63),并在那里做一个siftdown。继续直到你到达根。当你与一个有自己孩子的节点交换时,你也需要在该节点上执行一个siftdown。

如果您按照图中的这个顺序,可以看到这个模式将检查树中的所有节点。