堆排序算法时间复杂度推导
2010-02-05 22:37
369 查看
maxheapify的复杂度是o(lgn),而建立最大堆的复杂度是o(n),那么是不是堆排序算法的复杂度就是二者相乘呢?当然不是,怎么可能这么简单
首先,在建立一次最大堆,消耗n的时间,继续执行,每次将最大的数(根节点)选出来,然后maxheapify,直到将整个数组的元素历遍完毕。好了,回顾一遍堆排序算法后,开始正式推导。
首先,设堆的大小为n,堆的高度为lgn,设当前元素所在的高度为h
则每一次maxheapify的时间复杂度为0(lgn-h), 前提是maxheapify的复杂度为lgn
Buildheap 的复杂度为o(n)
平均每一层中应该有 个元素,所以,对排阻算法的时间复杂度应该为: 0(lgn-h)=o( (lgn-h))=o(nlgn)
首先,在建立一次最大堆,消耗n的时间,继续执行,每次将最大的数(根节点)选出来,然后maxheapify,直到将整个数组的元素历遍完毕。好了,回顾一遍堆排序算法后,开始正式推导。
首先,设堆的大小为n,堆的高度为lgn,设当前元素所在的高度为h
则每一次maxheapify的时间复杂度为0(lgn-h), 前提是maxheapify的复杂度为lgn
Buildheap 的复杂度为o(n)
平均每一层中应该有 个元素,所以,对排阻算法的时间复杂度应该为: 0(lgn-h)=o( (lgn-h))=o(nlgn)
相关文章推荐
- 逆序数对(inversion)个数统计 python解法与时间复杂度推导
- 快速排序的时间复杂度nlogn是如何推导的??
- 2.3-3时间复杂度的推导过程
- 算法的时间复杂度推导方法
- 时间复杂度推导证明--《算法导论》15.1-1题
- 快速排序的时间复杂度nlogn是如何推导的??
- 折半查找的时间复杂度log2(n)的推导
- 二分查找时间复杂度推导
- 关于大整数的乘法的算法时间复杂度的计算过程推导(纯属个人推测,请高人指正)
- 快速排序的时间复杂度nlogn是如何推导的??
- 在O(1)时间复杂度删除链表节点 - C++
- 查找无序数组中的一个元素下标,并分析时间和空间复杂度, 考虑效率(很重要)
- 数据结构中排序和查找各种时间复杂度
- 时间复杂度和空间复杂度详解
- 数据结构——时间/空间复杂度
- 算法的时间复杂度和空间复杂度总结
- 排序方法及时间复杂度
- 基于clock()和time()函数的时间复杂度计时
- 实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)