15 January 2013

堆排序,顾名思义,采用了堆这种数据结构来进行序列的排序。 一个堆就是一个完全二叉树。有两种排序堆,大根堆和小根堆。
大根堆的所有子树满足根节点大于子节点,小根堆则相反。
可以对大根堆进行的操作包括:

堆调整

改变根节点,则根节点可能比子节点小。通过与左右子节点比较大小进行调整,然后继续调整相应的子树。
##### 创建堆 从n个元素创建堆。首先将n个元素的序列以第一个元素为根逐层映射为一个完全二叉树,然后从最后一个非叶子节点到根节点进行堆调整。容易证明最后一个非叶子节点为floor(n/2)
##### 堆排序 首先创建堆,然后迭代执行:将根和最后一个叶子节点交换,堆大小减一,再调整堆。
##### 作为优先级 把对当作优先级队列来使用,一个最大优先级队列支持操作:1)取最大值2)取出最大值3)插入一个元素4)增加一个元素的优先级,这些操作到可以通过O(lgn)的时间复杂度轻易实现



blog comments powered by Disqus