算法导论学习笔记——第6章 堆排序
2015-05-12 22:08
429 查看
堆
堆数据结构是一种数组对象,可以被视为一棵完全二叉树。
对于给定的数组A,树的根为A[1],对于给定的下标为i的结点A[i],其父结点PARENT(i)=floor(i/2),左子结点LEFT(i)=2i,右子结点RIGHT(i)=2i+1
length[A]是数组中元素的个数,heap-size[A]是存放在数组A中,堆元素的个数
叶级结点的高度可以认为是0,每向上一层,高度加一,定义树的告诉为根结点的高度。
最大堆的性质
保持堆的性质
建堆
堆排序
最大优先级队列,支持以下操作
INSERT(S,x):把元素x插入集合S,S←S∪{x}
MAXIMUM(S):返回S中具有最大关键字的元素
EXTRACT-MAX(S):去除并返回S中具有最大关键字的元素
INCREASE-KEY(S,x,k):将元素x的关键字值增加到k,k不能小于x的原关键字值
堆数据结构是一种数组对象,可以被视为一棵完全二叉树。
对于给定的数组A,树的根为A[1],对于给定的下标为i的结点A[i],其父结点PARENT(i)=floor(i/2),左子结点LEFT(i)=2i,右子结点RIGHT(i)=2i+1
length[A]是数组中元素的个数,heap-size[A]是存放在数组A中,堆元素的个数
叶级结点的高度可以认为是0,每向上一层,高度加一,定义树的告诉为根结点的高度。
最大堆的性质
//非根结点的结点i,最多和其父结点的值一样大 A[PARENT(i)]>=A[i]
保持堆的性质
MAX-HEAPIFY(A,i) l←LEFT(i) r←RIGHT(i) if l<=heap-size[A] and A[l]>A[i] then largest←l else largest←i if r<=heap-size[A] and A[r]>A[largest] then largest←r if largest!=i then exchange A[i]↔A[largest] MAX-HEAPIFY(A,largest)
建堆
BUILD-MAX-HEAP(A) heap-size[A]←length[A] for i←floor(length[A]/2) downto 1 do MAX-HEAPIFY(A,i)
堆排序
HEAPSORT(A) BUILD-MAX-HEAP(A) for i←length[A] downto 2 do exchange A[1]↔A[i] heap-size[A]←heap-size[A]-1 MAX-HEAPIFY(A,1)
最大优先级队列,支持以下操作
INSERT(S,x):把元素x插入集合S,S←S∪{x}
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)
相关文章推荐
- 算法导论学习笔记--2--堆排序
- 算法导论学习笔记——堆排序
- 算法导论学习笔记(1)---堆排序
- 《算法导论》第6章 堆排序 个人笔记
- 《算法导论》学习笔记--第六章 堆排序
- 算法学习导论学习笔记-第6章 堆排序
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 算法导论学习笔记 第6章 堆排序
- 算法导论-堆排序学习笔记
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 《算法导论》笔记---第6章 堆排序
- 算法导论学习笔记之四--堆排序
- 算法导论学习笔记(一)排序算法之堆排序
- 算法导论学习笔记-第六章-堆排序
- 【算法导论】学习笔记——第6章 堆排序
- 《算法导论》笔记(4)堆排序与快速排序 含部分习题
- 平摊分析 (amortized analysis) -算法导论学习笔记
- windows程序设计_第6章_键盘——学习笔记
- 《算法导论》第6章 堆排序 (3)K路归并
- 算法导论学习笔记——红黑树