假设我们有一个数组int a[]={3,5,4,7,1,2},如果把这个數组看作是完全二叉树的顺序存储那么它对应图1-1(a)完全二叉树。
所谓最大堆就是a[i]>=a[2i+1], 且a[i]>=a[2i+2](i在此处对应0~5)这个描述即第四步的结果。也就是说我们紦数组a经过4步调整最终构建出了它的最大堆,如图1-1(d)另外需要说明的一点就是最大堆的调整始终是以非叶子结点调整(红色部分实际上昰创建初始堆的核心代码)。
实际运行结果:只打印了三行其实主要原因是在i=0时第三次和第四次排序一起做了,
另外:寻找非叶子结点可以用(数组长度-1)/2(最靠近叶子结点的父结点),开始逐次递减,但最终到0(也就是根结点)
以上仅仅只是创建堆的算法堆排序算法是在此基础上进行的。