这一章主要讲了两个点:1.堆排序。2.堆排序的应用(优先级队列)
堆排序
堆
堆是一种完全二叉树(不理解)。反正是一种树状的数据结构了吧。有几种操作。
求左子节点(2i),求右子节点(2i+1),求父节点(i/2)下取整。
保持最大堆结构(max-heapfiy)
建堆(building a heap)
然后这些属性就可以实现堆排序了
如果书上的内容初看有点看不懂可以看看这个百度经验
书上的伟大码比较容易看懂,然后自己再画一画就可以理解了。
优先级队列
这个就是堆排序的一种用法吧。
就像是如果有一堆的任务。就给每一个任务一个优先级(关键字)。你可以用关键字很容易找出你想找的任务。
有一下几种操作:
HEAP-MAXIMUM(A) 返回最大值
HEAP-EXTRACT-MAX(A) 返回最大值并删除
HEAP-INCREASE-KEY(A,I,KEY) 将i的关键字值编程key
HEAP-INSERT(A,KEY) 将key插入
这里有些心得:一开始的时候觉得伪代码比较难懂。还不如源代码咧。但是现在我不这么觉得了。。
伪代码真是好东西,越看越喜欢。我要学一学怎么在博客上写伪代码了。