码迷,mamicode.com
首页 > 编程语言 > 详细

【算法导论】第六章、堆排序

时间:2017-08-22 23:07:02      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:一点   rac   堆排   操作   优先级队列   管理   incr   sig   级别   

基本过程:

1、保持最大堆的性质:假设两个子堆都满足,只需要根节点依次换下去,复杂度O(lg n) 

2、初始化堆:后半段都是叶子,在前半段从后往前,依次执行上述最大堆性质的操作,名义复杂度是O(n lg n),但是有更精确的计算,

  在高度为h的节点为O(h), 因此为 n\sigma (h / 2^h),其复杂度为O(n)。(思想是高层复杂度才高,指数衰减,而复杂度增长是lg级别,因此被dominate掉了)

堆排序算法:先建最大堆,每次把顶上的位置与合适的位置互换,然后执行过程1, 共执行n次,其复杂度为 O(n lg n)

 

优先级队列:集合的一个管理方式

操作:insert(x, S), max(S), extract_max(S), increase(x, k, S) - 将x的值增长为k,

1、max 很显然。。。取第一个元素即可

2、extract_max 与之前相同,O(lg n),

3、insert操作:在最后加入,然后一点一点上移。

 

堆排序代码:未完待续

 

【算法导论】第六章、堆排序

标签:一点   rac   堆排   操作   优先级队列   管理   incr   sig   级别   

原文地址:http://www.cnblogs.com/yesuuu/p/7413888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!