← 返回首页

排序算法可视化

单算法逐步演示,或多算法同数据并排对比

元素数量:32

比较次数:0

交换/写入:0

点击切换要演示的算法

数据场景

最常见测试场景,考察平均表现。

冒泡排序Bubble Sort

点击「开始排序」或「单步执行」查看动画

比较 0交换 0
未处理比较中交换/移动基准/父节点当前区间已排序

算法说明

重复比较相邻元素,将较大值逐步「冒泡」到末尾。

时间复杂度
O(n²)
稳定性
稳定

包含算法

  • 冒泡排序O(n²)
  • 选择排序O(n²)
  • 插入排序O(n²)
  • 归并排序O(n log n)
  • 快速排序O(n log n)
  • 堆排序O(n log n)

常见使用场景

实际开发中按数据特征选择算法,而非只看理论复杂度。

通用内存排序

对普通整型/对象数组做就地排序,追求平均性能。

推荐:快速排序、归并排序

C++ std::sort、Python Timsort 等语言内置实现多基于快排或混合策略。

需要稳定排序

当前算法适用

相等元素的相对顺序必须保持不变,例如多字段排序的次级键。

推荐:归并排序、插入排序、冒泡排序

数据库 ORDER BY、按时间再按优先级排序等场景常见。

数据基本有序

当前算法适用

日志时间戳、追加写入的列表等,只有少量元素位置不对。

推荐:插入排序、冒泡排序

插入排序在近乎有序时可接近 O(n),冒泡的优化版也能提前结束。

小规模数组

元素数量很少(通常 n < 16),常作为混合排序的兜底分支。

推荐:插入排序、选择排序

快速排序/归并排序的递归开销在小数组上反而更贵。

链表结构

只能顺序访问,不适合需要随机下标的算法。

推荐:归并排序

归并排序只需 O(1) 额外指针操作即可合并链表。

外部排序(超内存)

数据量超过内存,需要分块读写到磁盘或对象存储。

推荐:归并排序

经典做法是分块排序后多路归并,数据库与大数据系统广泛使用。

实时/流式插入

元素持续到达,需要边接收边维持有序状态。

推荐:插入排序

每次插入一个元素并调整位置,适合动态数据集。

交换代价高

写闪存、远程节点等场景下,尽量减少元素移动次数。

推荐:选择排序

选择排序每轮最多交换一次,但比较次数仍为 O(n²)。

保证 O(n log n) 且原地

不能接受快排最坏 O(n²),又希望控制额外空间。

推荐:堆排序

堆排序满足原地与稳定上界,但常数因子通常大于归并/快排。

教学与可视化

当前算法适用

帮助理解「比较-交换」过程,而非追求生产性能。

推荐:冒泡排序、选择排序、插入排序

过程直观、步骤易动画化,适合入门讲解。