排序算法可视化
排序过程
未完成比较写入基准最终位置
比较 0交换 0主数组写入 0辅助写入 0
0 / 0
支持 1~32 个 -999~999 的整数,逗号或空格分隔。编号表示元素原始位置,数组下标从 0 开始。
算法说明与统计口径
动画使用 JavaScript 驱动,其他语言展示对应实现;高亮表示当前步骤对应的关键语句,不代表正在执行该语言程序。
比较仅统计元素值比较;一次交换计 2 次主数组写入(含同位置交换);辅助数组写入单独统计。变量赋值、下标判断不计入比较次数。动画播放时长不是算法运行时间。
概述
在线演示冒泡、选择、插入、归并、快速和堆排序,支持自定义数组、升降序、播放暂停、前后单步、代码联动,以及 Python、JavaScript、Java、C、C++、Go 示例代码复制和下载。
输入数组并选择算法,点击“播放”观察排序过程,也可以逐步前进、回退或拖动进度。每个元素附带原始编号,方便观察重复值的相对顺序。
| 算法 | 主要思路 | 稳定性 |
|---|---|---|
| 冒泡排序 | 比较相邻元素,把目标逐步移向末尾 | 稳定 |
| 选择排序 | 每轮选择目标并交换到区间开头 | 不稳定 |
| 插入排序 | 暂存 key,移动元素后插入有序前缀 | 稳定 |
| 归并排序 | 拆分区间,借助辅助数组稳定合并 | 稳定 |
| 快速排序 | 末尾基准的 Lomuto 分区,再递归排序 | 不稳定 |
| 堆排序 | 建立堆,反复将堆顶放到最终位置 | 不稳定 |
代码区可切换 Python、JavaScript、Java、C、C++、Go 和伪代码。六种语言示例包含当前数组与排序方向,可直接复制或下载;关键语句随演示步骤高亮。
聚焦动画区后,空格播放/暂停,左右箭头前后单步,Home/End 跳到开始或结束。手机上图形可横向滚动,代码和说明使用标签切换。
动画由浏览器 JavaScript 驱动,不会执行所选语言代码;操作计数与动画时长不同。稳定性描述对应本工具的具体实现,不稳定算法在某一次输入上也可能保持重复值顺序。