一.思想:
先将初始序列构造成一个大根堆(或者小根堆),此堆为初始无序区。再将最大记录R[1]与无序区的最后一个记录R[n]交换,由此可以得到新的无序区R[1....n-1]和有序区R[n]。由于交换之后新的根R[1]可能不满足大根堆的性质,故将当前无序区R[1...n-1]再次调整为堆,然后再次将R[1]与R[n-1]交换,依次类推。
二.图解:
给定一个整形数组num[]={16,7,3,20,17,8},对其进行堆排序。首先根据该数组元素构建一个完全二叉树,得到
然后需要构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:
这样就得到了初始堆。