常用算法的时间复杂度

常用算法的时间复杂度

常见时间复杂度类型

类型 名称 运行1s,n的最大值
\(O(1)\) 常数复杂度 /
\(O(\log_{2}n)\) 对数复杂度 特别大,几乎无需考虑
\(O(n)\) 线性复杂度 \(10^7\)
\(O(n\log_{2}n)\) 线性对数复杂度 \(10^6\)
\(O(n^2)\) 平方复杂度 \(5000\)
\(O(2^n)\) 指数复杂度 \(25\)
\(O(n!)\) 阶乘复杂度 \(11\)

排序算法

算法名称 平均时间复杂度 最坏时间复杂度 稳定性
选择排序 \(O(n^2)\) \(O(n^2)\) 不稳定
冒泡排序 \(O(n^2)\) \(O(n^2)\) 稳定
插入排序 \(O(n^2)\) \(O(n^2)\) 稳定
快速排序 \(O(n\log_2n)\) \(O(n^2)\) 不稳定
计数排序 \(O(n+m)\) \(O(n+m)\) 稳定
基数排序(k为基数) \(O(log_2n(n+k))\) \(O(log_2n(n+k))\) 稳定
堆排序 \(O(n\log_2n)\) \(O(n\log_2n)\) 不稳定

总结:在基础的排序算法中,只有选择排序、快速排序是不稳定排序。计数排序、基数排序属于不基于比较的排序,其他基于比较。
注意:稳定排序指相同的多个数排序后顺序不变。

图论

最短路

算法名 时间复杂度(n点m边)
Floyd \(O(n^3)\)
Dijkstra \(O(n^2)\)
Dijkstra的堆优化 \(O((m+n)\log_{2}n)\)
Bellman-ford \(O(mn)\)

最小生成树

算法名 时间复杂度(n点m边)
kruskal \(O(m\log_2m)\)
prim \(O(n^2)\)
boruvka \(O(m\log_2n)\)
posted @ 2024-08-02 15:21  mike_666  阅读(158)  评论(0)    收藏  举报