05.堆的原理、建堆的过程,最小(大)堆插入一个元素的过程
原理
- 堆是一种完全二叉树, 最小堆的孩子节点小于等于父亲节点, 最大堆反之.
插入
时间复杂度 O ( l o g n ) O(logn) O(logn)
- 以最小堆为例, 将新的节点放入堆的尾部.
- 令该节点与其父亲节点比较, 若该节点小于父亲节点, 则上浮, 以此往复.
删除
时间复杂度 O ( l o g n ) O(logn) O(logn)
- 以最小堆为例, 令堆的尾部代替堆顶元素.
- 令该节点与其孩子节点比较, 选出孩子节点中较大者, 进行下沉操作, 以此往复.
建立
时间复杂度 O ( n ) O(n) O(n)
- 以最小堆为例, 将数组建成一颗完全二叉树.
- 从最后一个非叶子结点开始, 不断执行下沉操作, 再对倒数第二个非叶子节点执行下沉, 以此往复.