堆排序

2017-08-07  本文已影响0人  lazysong

1.二叉堆的定义

最大堆:
除了根结点外,所有的结点都要满足,A[PARENT(i)] >= A[i]
最小堆:
除了根结点外,所有的结点都要满足,A[PARENT(i)]<=A[i]

2.堆的属性

3.堆的应用

3.1堆排序

3.2实现优先队列

最大(小)堆具有很多很好的特性,比如:

实现优先队列的几个重要的过程(以最大优先队列为例):

  1. INSERT(S,x)
  2. MAXIMUM(s)
  3. EXTRACT-MAX(S)
  4. INCREASE-KEY(S,x,k)

EXTRACT-MAX过程,类似于堆排序中for循环内的操作,先交换,再从上往下调整,时间复杂度为O(lgn)
INCREASE-KEY过程,沿着当前结点往上不断比较,时间复杂度为O(lgn)
INSERT过程,先在尾部新建一个结点,然后调用INCREASE-KEY过程

上一篇 下一篇

猜你喜欢

热点阅读