排序算法的时间复杂度

计算时间复杂度方法步骤:

用1代替所有的加法常数 

只保留最高阶级

去除最高阶级的系数

列:T(n) = 6n^2+7n+5  =>  T(n) = 6n^2+7n+1  =>  T(n) = 6n^2  =>  T(n) = n^2  =>  O(n^2)

常见的时间复杂度由小到大

常数阶 O(1):没有循环等复杂结构

对数阶 O(log2n):循环中每次×2,直到得出的数满足条件 也就是2的X次方等于n

线性阶 O(n) :循环中依次递增

线性对数阶 O(nlog2n):对数阶循环n遍

平方阶 O(n^2):双层循环都循环n遍

立次方阶 O(n^3):三层循环都循环n遍

k次方阶 O(n^k):k层循环都循环n遍

指数阶 O(2^n)

各个算法的平均复杂度(一般只讨论最坏情况)

排序法 平均时间 最差情形 稳定度 额外空间 备注
冒泡 O(n^2) O(n^2) 稳定 O(1) n小时较好
选择 O(n^2) O(n^2) 不稳定 O(1) n小时较好
插入 O(n^2) O(n^2) 稳定 O(1) 大部分已排序时较好
基数 O(logRB) O(logRB) 稳定 O(1)

B是真数(0-9)

R是基数(个十百)

Shell O(nlogn) O(n^s) 1<s<2 不稳定 O(1) s是所选分组
快速 O(nlogn) O(n^2) 不稳定 O(nlogn) n大时较好
归并 O(nlogn) O(nlogn) 稳定 O(1) n大时较好
O(nlogn) O(nlogn) 不稳定 O(1) n大时较好

猜你喜欢

转载自www.cnblogs.com/bingbug/p/12096090.html