首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

快速排序的空间复杂度到底是多少?该怎么处理

2013-08-25 
快速排序的空间复杂度到底是多少?如题 有说 O(n) 有说 O(log n) 到底多少呢?是不是,取决于分划基准的选择,

快速排序的空间复杂度到底是多少?
如题 
有说 O(n) 有说 O(log n) 到底多少呢?
是不是,取决于分划基准的选择,每次都选在中间,O(log n)
若基本有序,退化为冒泡,O(n)
我理解的对不?

[解决办法]
O(log n),就是递归的深度,递归的时候使用的栈空间
稍微优化一点的快排,比如取首尾中三个数据,取其中间的值作为划分标准,不会出现退化到冒泡的可能。
[解决办法]
(nlog(n))
[解决办法]
每次递归传参left,和right,平均递归次数是log(n)次,所以平均空间复杂度是O(log(n))。最坏的情况是O(n)(初始是逆序的情况)。
[解决办法]

引用:
O(log n),就是递归的深度,递归的时候使用的栈空间
稍微优化一点的快排,比如取首尾中三个数据,取其中间的值作为划分标准,不会出现退化到冒泡的可能。

这种简单的优化也有可能退化到冒泡的。要确保不退化到冒泡,请参考算法导论第三版9.3章。

热点排行