计算时间复杂度方法步骤:
用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大时较好 |