算法导论第六章堆排序
Posted yesuuu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论第六章堆排序相关的知识,希望对你有一定的参考价值。
基本过程:
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操作:在最后加入,然后一点一点上移。
堆排序代码:未完待续
以上是关于算法导论第六章堆排序的主要内容,如果未能解决你的问题,请参考以下文章