学习首页/排序算法/冒泡排序交互演示 · JavaScript

排序算法 BUBBLE SORT

冒泡排序.

比较相邻元素,将较大的值逐轮移动到右侧。

时间平均 O(n²) / 最好 O(n)额外空间O(1)稳定性稳定

原理与执行逻辑

从左到右比较相邻元素,顺序相反时交换。每轮比较都会把未排序范围中的最大值送到右端,因此下一轮可以缩短范围。

执行步骤

  1. 将最后一个下标设为本轮终点。
  2. 依次比较相邻值,左边较大时交换,并记录本轮发生过交换。
  3. 本轮结束后将终点左移,右侧已就位元素不再参与比较。
  4. 若整轮没有交换,数组已有序,提前结束。

关键理解

一轮结束后,右侧已就位区间包含最大的若干元素。只交换严格逆序的相邻值,相等元素的相对顺序保持不变。

简短示例

[4, 2, 3] 先交换 4 与 2,再交换 4 与 3,第一轮得到 [2, 3, 4];下一轮没有交换,结束。

代码与执行动画

STEP 0 / 55
冒泡排序
function bubbleSort(arr) {  for (let end = arr.length - 1; end > 0; end--) {    let swapped = false;    for (let j = 0; j < end; j++) {      if (arr[j] > arr[j + 1]) {        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];        swapped = true;      }    }    if (!swapped) break;  }  return arr;}
13 行 · 0 个片段标记

高亮对应当前步骤;源码对传入数组进行原地排序。

数组状态

升序 · 8 个元素
比较 0实际交换 0数组写入 0当前区间 —
待排序当前操作已就位

下标显示在底部;柱体随元素移动,等值元素也保留独立身份。

0

准备排序

点击下一步或自动播放,观察数组从左到右升序排列的过程。

调整待排序数组

使用相同数据切换算法,观察比较与交换过程。

2 至 12 个整数,范围 1 至 99;逗号或空格分隔。

算法要点

冒泡排序的执行规则

每轮结束后,当前范围内的最大值就位。本实现遇到整轮无交换时提前结束。

交换次数仅统计两个不同位置的交换;可输入重复值。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。

  • 排序应用练习,可使用冒泡排序;进阶要求一趟扫描,需要另外实现线性算法。