算法整体思路:
1、将长度为n的数组构造成一个大顶堆。
2、将堆顶元素与尾节点交换,并将其输出,得到最大元素,放于数组尾部。
3、将剩余的n-1个节点重新构造为大顶堆。
4、重复2、3,直到数组排序完成。
堆排序的基本特征:
时间复杂度:O(nlogn)
空间复杂度:O(1)
堆的建立:
堆可以看成是一颗完全二叉树,
当每个节点都大于等于它的两个子节点时,就称为大顶堆,
当每个节点都小于等于它的两个子节点时,就称为小顶堆。
在这里我们主要讨论的是大顶堆的情况。
举个栗子:
假设给定一串数组[6,5,7,8,3,1,4,2,0],我们可以将其视为一颗完全二叉树:
在得到这颗树后,比较节点与根节点,如果其根节点中有元素大于该节点,就交换这两个元素。
这个过程是从下到上的过程。