算法说明
重复比较相邻元素,将较大值逐步「冒泡」到末尾。
- 时间复杂度
- O(n²)
- 稳定性
- 稳定
元素数量:32
比较次数:0
交换/写入:0
点击「开始排序」或「单步执行」查看动画
重复比较相邻元素,将较大值逐步「冒泡」到末尾。
实际开发中按数据特征选择算法,而非只看理论复杂度。
对普通整型/对象数组做就地排序,追求平均性能。
推荐:快速排序、归并排序
C++ std::sort、Python Timsort 等语言内置实现多基于快排或混合策略。
相等元素的相对顺序必须保持不变,例如多字段排序的次级键。
推荐:归并排序、插入排序、冒泡排序
数据库 ORDER BY、按时间再按优先级排序等场景常见。
日志时间戳、追加写入的列表等,只有少量元素位置不对。
推荐:插入排序、冒泡排序
插入排序在近乎有序时可接近 O(n),冒泡的优化版也能提前结束。
元素数量很少(通常 n < 16),常作为混合排序的兜底分支。
推荐:插入排序、选择排序
快速排序/归并排序的递归开销在小数组上反而更贵。
只能顺序访问,不适合需要随机下标的算法。
推荐:归并排序
归并排序只需 O(1) 额外指针操作即可合并链表。
数据量超过内存,需要分块读写到磁盘或对象存储。
推荐:归并排序
经典做法是分块排序后多路归并,数据库与大数据系统广泛使用。
元素持续到达,需要边接收边维持有序状态。
推荐:插入排序
每次插入一个元素并调整位置,适合动态数据集。
写闪存、远程节点等场景下,尽量减少元素移动次数。
推荐:选择排序
选择排序每轮最多交换一次,但比较次数仍为 O(n²)。
不能接受快排最坏 O(n²),又希望控制额外空间。
推荐:堆排序
堆排序满足原地与稳定上界,但常数因子通常大于归并/快排。
帮助理解「比较-交换」过程,而非追求生产性能。
推荐:冒泡排序、选择排序、插入排序
过程直观、步骤易动画化,适合入门讲解。