堆排(Heap Sort)
1、概念
完全二叉树特点:
对于完全二叉树中任一点 i:
- 左孩子的位置为: 2i
- 右孩子的位置为:2i+1
- 父节点位置为:i/2 向下取整
最小二叉堆:根节点的值小于子树的任一元素,对于子树也一样。
堆排实现:最小二叉堆,优先队列
2、插入元素
原理:在末尾插入,根据大小关系进行调整。
插入14:
复杂度:
- 插入一个元素平均比较次数为2.607,移动1.607层。
- 一次插入复杂度为平均为O(1),最差为O(logN)。
3、删除最小元素
原理:删除根节点,其它元素依次向上补空。
删除:
复杂度: O(logN)
4、排序
时间复杂度为O(N logN)
- 逐个插入,建立二叉堆,O(N)
- 依次删除最小元素,O(N logN)
- 删除的元素依次存入新的数组,即得到升序数组