1, 堆排序
设有n 个元素,采用一维向量存储,R[1,2,……n];若元素的之间的关系满足ki>=2i+1 && ki>=2i || ki<=2i+1 && ki<=2i;这样的关系,称之为堆;如果我们将其的存储结构用二叉树描述,则堆实际上是满足如下性质的wanquan二叉树:树中任一结点的关键值均不小于(或者大于)其左右子树的关键值。
以大顶堆为例,虽然在堆内部,记录无序,但是堆顶的值是最大的,在堆排序中,首先将R[1]与R[n]交换,然后在将R[1]~R[n-1]调整为堆,然后再将R[1]与R[n-1]交换,再将R[1]~R[n-2]调整为堆,……,直到得到一个关键码有序的序列。
因此,对排序涉及到两个关键的步骤:
1),建堆
2),帅选
建立堆,把n个元素建成二叉树,将每个叶子为根的子树视为堆,然后对R[n/2]为根的子树进行调整,对R[n/2-1]为根的子树进行调整,直到对R[1]为根的树进行调整,这就是最后的初始堆。