数组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。
如果您按照图中的这个顺序,可以看到这个模式将检查树中的所有节点。