1、堆排序原理就是找出最大的一个元素,并将其放到最后,至于怎样找到最大的元素就需要用到堆来维护无序的数组;
最大堆维护:每个父节点都大于子节点,最小堆维护:每个父节点都大于子节点
对于任意一个数组:
都可以转化为完全二叉树:
对于i下标节点的左孩子的下标为2*i + 1,右孩子的下标为2*i+2,父节点的下标为(i-1)/2
2、最大堆维护(注意:对一个节点进行最大堆维护,不是对于整个树而言的,与构建最大堆树有本质区别):
原数组所构成的完全二叉树不满足最大堆的特性,需要进行最大堆维护使其变成一个最大堆。
伪代码:
MAXHEAPIFY(Arr , i ,heapSize)
//参数说明: