【听课笔记】数组的堆排序4——代码解析之 heapify

heapify代码:当数组中某个值发生变化了(变小),怎么将其重新调整为大根堆

如:
数组 之前为这个样子
【听课笔记】数组的堆排序4——代码解析之 heapify
【听课笔记】数组的堆排序4——代码解析之 heapify
6突然变为1【听课笔记】数组的堆排序4——代码解析之 heapify
怎么将其重新调整为大根堆?

先按我们之前提到的公式,找到其左右两个孩子:
【听课笔记】数组的堆排序4——代码解析之 heapify
在这两个孩子中,找到其中最大的,和1比较,交换!
得到:
【听课笔记】数组的堆排序4——代码解析之 heapify
继续比较:
【听课笔记】数组的堆排序4——代码解析之 heapify
【听课笔记】数组的堆排序4——代码解析之 heapify
相应code:
【听课笔记】数组的堆排序4——代码解析之 heapify
其中,heapsize的含义:
【听课笔记】数组的堆排序4——代码解析之 heapify
例如,我们一般以整个数组长度为标记 来判断是否越界
【听课笔记】数组的堆排序4——代码解析之 heapify
同理,我们用heapsize 来标记 越界与否
【听课笔记】数组的堆排序4——代码解析之 heapify

下面解释,这句代码的含义【听课笔记】数组的堆排序4——代码解析之 heapify
即,如果一开始由7变成5,就不用往下沉,跳出整个大循环
【听课笔记】数组的堆排序4——代码解析之 heapify