关于shiftdown方法的疑问

来源:4-4 Shift Down

慕粉4283821

2020-12-29

老师,请问为什么 需要判断

data[k] > data[j] ? break

然后break 呢。 如果是最大堆 ,应该不会出现这种情况把。我理解 是 下面层级节点的值, 肯定不会大于 父节点的左右节点值的最大值

写回答

1回答

liuyubobobo

2020-12-29

8

      8
    /   \
  7      4
 / \    /
1   2  3


这是一个最大堆。我们 extractMax 以后,3 直接放到堆顶

      3
    /   \
  7      4
 / \   
1   2


开始对 3 shiftDown,首先 7 比 4 大,所以 3 和 7 交换:

      7
    /   \
  3      4
 / \   
1   2


然后 3 已经比 1 和2 都大了,不需要交换,直接 break,维护了是一个最大堆。


继续加油!:)

0
1
慕粉4283821
感谢老师~!! 加了这句之后写的排序 也运行成功了
2020-12-29
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程