算法复杂性
1.如何描述算法的效率?
一段代码的执行时间和速度受运行环境影响,所以不能用时间来描述一个算法的效率,我们用 “阶”,“阶” 不是描述大小 而是描述增长率(数据规模和时间的增长率).
例如插入排序的最坏时间用O(n²) 表示,并不是说时间是O(n²) 而表示的是增长率是O(n²)
2.描述增长率的过程中忽略一些附加因素
a.忽略低阶项,保留最高项
b.忽略常系数
c.n无限大
常用算法复杂度
排序法 |
最差时间分析 | 平均时间复杂度 | 稳定度 | 空间复杂度 |
冒泡排序 | O(n2) | O(n2) | 稳定 | O(1) |
快速排序 | O(n2) | O(n*log2n) | 不稳定 | O(log2n)~O(n) |
选择排序 | O(n2) | O(n2) | 稳定 | O(1) |
二叉树排序 | O(n2) | O(n*log2n) | 不一顶 | O(n) |
插入排序 |
O(n2) | O(n2) | 稳定 | O(1) |
堆排序 | O(n*log2n) | O(n*log2n) | 不稳定 | O(1) |
希尔排序 | O | O | 不稳定 | O(1) |