堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
要将初始数组调整为一个大根堆,就必须将它所对应的完全二叉树中以每一结点为根的子树都调整为堆。显然只有一个结点的树是堆,而在完全二叉树中,所有序号大于n/2的结点都是叶子,因此以叶子结点为根的子树均已是堆。这样,我们需要依次将以第n/2个结点之前的结点为根的子树都调整为堆。
堆排序的基本思想:
① 先将初始数据R[1..n]建成一个大根堆,此堆为初始的无序区
② 再将关键字最大的堆顶元素R[1]和无序区的最后一个记录R[n]交换,