优先队列和堆篇(1)—— 二叉堆介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 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
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/86768303