算法图库与表格汇总

图片请与本 HTML 放在同一目录;点击缩略图可放大预览。

2) 排序算法对比表

说明:此表按“思路、复杂度、稳定性、最优情况、最坏情况”组织。复杂度默认指时间复杂度(并补充空间复杂度)。

算法 思路 复杂度(时间/空间) 稳定性 最优情况 最坏情况
归并排序 分治:递归将数组二分,分别排序后进行“有序合并”。 时间:O(n log n)
空间:O(n)
稳定(合并时相等元素保持相对次序) 时间:O(n log n) 时间:O(n log n)
选择排序 每一轮从未排序区间中选择最小(或最大)元素,放到已排序区间末尾(交换)。 时间:O(n^2)
空间:O(1)
不稳定(交换可能改变相等元素顺序) 时间:O(n^2) 时间:O(n^2)
插入排序 维护前缀有序:将当前元素向左插入到合适位置(通过移动元素实现)。 平均时间:O(n^2)
空间:O(1)
稳定(相等元素不跨越) (基本有序)时间:O(n) (逆序)时间:O(n^2)
快速排序 分治:选枢轴 pivot,把数组划分为“小于 pivot”和“大于等于 pivot”(或相反)两部分,递归排序子区间。 平均时间:O(n log n)
空间:平均 O(log n)(递归栈),最坏 O(n)
不稳定(交换/划分会打乱相等元素) (划分均匀)时间:O(n log n) (极端不均匀,如已排序且选端点为枢轴)时间:O(n^2)

3) MST 两种算法对比表

说明:MST 一般不讨论“排序稳定性”那种稳定概念;这里“稳定性”列写为“不适用 / 可能多解(权值相同)”。

算法 思路 复杂度(常见实现) 稳定性
Kruskal 边的角度:将所有边按权值从小到大排序,依次尝试加入;若加入后成环则跳过(用并查集判断)。 排序:O(E log E)
并查集:近似 O(E α(V))
综上:通常写 O(E log E)
不适用(MST 无“稳定排序”概念);当存在相同权值边时,可能得到不同但同权的 MST。
Prim 点的角度:从任意起点开始,每次选择一条“连接已选集合与未选集合”的最小权值边,把新顶点扩展进来。 二叉堆 + 邻接表:O(E log V)
邻接矩阵:O(V^2)
(进阶)斐波那契堆:O(E + V log V)
不适用;同权边情况下可能多解(取边顺序不同会得到不同 MST)。