0%
| Operation |
Average Case |
Amortized Worst Case |
| Copy |
O(n) |
O(n) |
| Append[1] |
O(1) |
O(1) |
| Insert |
O(n) |
O(n) |
| Get Item |
O(1) |
O(1) |
| Set Item |
O(1) |
O(1) |
| Delete Item |
O(n) |
O(n) |
| Iteration |
O(n) |
O(n) |
| Get Slice |
O(k) |
O(k) |
| Del Slice |
O(n) |
O(n) |
| Set Slice |
O(k+n) |
O(k+n) |
| Extend[1] |
O(k) |
O(k) |
| Sort |
O(n log n) |
O(n log n) |
| Multiply |
O(nk) |
O(nk) |
| x in s |
O(n) |
- |
| min(s), max(s) |
O(n) |
- |
| Get Length |
O(1) |
O(1) |
| Operation |
Average Case |
Amortized Worst Case |
| Copy |
O(n) |
O(n) |
| append |
O(1) |
O(1) |
| appendleft |
O(1) |
O(1) |
| pop |
O(1) |
O(1) |
| popleft |
O(1) |
O(1) |
| extend |
O(k) |
O(k) |
| extendleft |
O(k) |
O(k) |
| rotate |
O(k) |
O(k) |
| remove |
O(n) |
O(n) |
| Operation |
Average Case |
Amortized Worst Case |
| Copy[2] |
O(n) |
O(n) |
| Get Item |
O(1) |
O(n) |
| Set Item[1] |
O(1) |
O(n) |
| Delete Item |
O(1) |
O(n) |
| Iteration[2] |
O(n) |
O(n) |
- 讲述了
线性链表, 字符串, 栈和队列, 多维数组, 广义表, 树, 图, 排序, 查找, 文件
- 有较为详细的性能分析, 偏重理论细节, 还有习题可以做!
- 平方阶(O(n^2))排序: 一般称为简单排序,例如直接插入、直接选择和冒泡排序
- 线性对数阶(O(nlgn))排序: 如快速、堆和归并排序
- O(n^(1+£))阶排序(0<£<1): 如希尔排序
- 线性阶(O(n))排序: 如桶、箱和基数排序
- 排序方法的选择
- 简单排序中直接插入最好,快速排序最快,当文件为正序时,直接插入和冒泡均最佳。
- 若n较小(如n≤50),可采用直接插入或直接选择排序。
- 若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
- 若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
- 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
- 堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
- 若要求排序稳定,则可选用归并排序。
原创于 DRA&PHO