堆
堆
概念
堆是一种特殊的完全二叉树。
大根堆(大顶堆)
一棵完全二叉树,满足任一节点都比起孩子节点大。如下图所示:
小根堆(小顶堆)
一棵完全二叉树,满足任一节点都比其孩子节点小。
堆的向下调整性质
当根节点的左右子树都是堆时,可以通过一次向下调整来将其变换成一个堆。
例如下图:
根节点的两个子节点9和7中选大的9作为根节点;再比较2与8和5的大小,发现2比这两个都小,从8和5中选较大的8;然后再2与6和4的大小,发小2比6和4都小,选6和4中的6作为节点,将2放置到原来6的位置,这样就完成了对的向下调整。
构造堆
从最后一个非叶子节点开始调整,依次向前调整。如下图所示:
从3节点开始调整,将3和5交换位置,等到新的完全二叉树;再调整9节点,接下来是1节点、8节点、6节点;就这样一步步的调整完成,构建大根堆。
排序
将上一步调整得到的大根堆出数,第一次出9,然后将最后一个节点放到根节点,然后向下调整一次。完了再充根节点出数,再取最后一个,以此类推,直到所有的数都出完,这样就得到了一个有序的列表。