堆排序只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
一、堆的定义及建堆完整过程
堆的定义如下:n 个元素的序列 { k1 , k2 , ... , kn }当且仅当满足下列关系时,称之为堆。
若将和此数组序列对应的以为数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列 { k1 , k2 ,... ,kn }是堆,则堆顶元素(或完全二叉树的根)必为序列中 n 个元素的最小值(或最大值)。例如,下列两个序列为堆,对应的完全二叉树如下图所示。
图 1 大顶堆与小顶堆