堆排序的应用-优先级队列

优先级队列是一种用来维护一组元素构成的集合S的数据结构,这一组元素中的每一个都有

一个关键字key。一个最大优先级队列支持以下操作:

INSERT(S, x): 把元素x插入集合S

MAXIMUM(S): 返回S中具有最大关键字的元素

EXTRACT-MAX(S): 去掉并返回S中得具有最大关键字的元素

INCREASE-KEY(S, x, k): 将元素x的关键字的值增加到k,这里k值不能小于x的原关键字的值

HEAP-MAXIMUM(A)
  return A[1]
HEAP-EXTRACT-MAX(A)
  if heap-size[A] < 1
    then error "heap underflow"
  max ← A[1]
  A[1] ← A[heap-size[A]]
  heap-size[A] ←heap-size[A] - 1
  MAX-HEAPIFY(A, 1)
  return max
HEAP-INCREASE-KEY(A, i, key)
  if key < A[i]
    then error "new key is smaller than current key"
  A[i] ← key
  while i > 1 and A[PARENT(i)] < A[i]
    do exchange A[i] ↔ A[PARENT(i)]
      i ← PARENT(i)
MAX-HEAP-INSERT(A, key)
  heap-size[A] ← heap-size[A] + 1
  A[heap-size[A]] ← -∞
  HEAP-INCREASE-KEY(A, heap-size[A], key)

 

 

posted @ 2012-05-06 15:24  qiangzhu  阅读(292)  评论(0编辑  收藏  举报