版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86768303
1 优先队列
- 堆在最差的情况下也是 O(logn)
入队 | 出队 | |
---|---|---|
普通线性结构 | O(1) | O(n) |
顺序线性结构 | O(n) | O(1) |
堆 | O(logn) | O(logn) |
2 堆的基础表示—— 二叉堆
- 二叉堆是一棵完全二叉树
- 完全二叉树:把元素顺序排列成树的形状。(把元素一层一层排列直到放不下为止)
- 二叉堆: 堆中某个节点的值总是不大于其父节点的值。(根节点最大,这种堆叫做最大堆)
- 用数组存储二叉堆
* parent(i) = i /2
* left child (i) = 2 * i
* right child(i) = 2 * i +1
- 数组下标从 0 开始
2.1 向堆中添加元素
- Sift Up
2.3 从堆中取出元素
只能取最大元素
- Sift Down