1.数据结构——堆(Heap)
堆是计算机科学中一类特殊的数据结构的总称,是可以看成一棵树的数组对象。
堆总是满足以下两条性质:
1.堆中的每一个节点都满足其值总是大于或小于它的所有子结点。
2.堆总是一棵完全二叉树。
如果堆的每一个节点满足其值总是大于它的孩子结点,则堆为大顶堆,如果堆的每一个节点满足其值总是小于它的孩子结点,则堆为小顶堆。
2.算法思想
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆排序的基本思想是:将待排序序列构造成一个大顶堆(或小顶堆),此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,在根节点处就可以得到一个次大值,如此反复执行,重复n次,便能得到一个有序序列了。它的平均时间复杂度为O(nlogn)。
构造大顶堆或小顶堆时,采用的是由下而上构造堆的思想,先将每个节点的左右子树构造成堆,然后再将该节点与其左右子堆合并成一个大堆,以此由下而上将整棵树构造成小堆顶或大顶堆。
代码实现:
class heap{
//堆排序
public int[] heapSort(int[]A){
for(int i=A.length