前端算法: 冒泡排序

3 阅读1分钟

冒泡排序:一种基础的交换排序算法,通过相邻元素的两两比较和交换,将最大(或最小)的元素逐步“浮”到数列末端。


1. 核心思想

每一轮遍历,比较所有相邻元素,如果顺序不对就交换。每完成一轮,当前未排序部分的最大元素就会“冒泡”到最后正确的位置

2. 代码实现(关键)

function bubbleSort(arr) {
  let n = arr.length;
  for (let i = 0; i < n - 1; i++) { // 遍历轮数
    for (let j = 0; j < n - i - 1; j++) { // 每轮比较范围
      if (arr[j] > arr[j + 1]) { // 比较相邻元素
        // ES6 交换元素
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  return arr;
}

3. 时间复杂度

  • 最好情况(已有序):O(n),一轮内完成(需优化版本,见下)。
  • 最坏/平均情况:O(n²)。
  • 空间复杂度:O(1),原地排序。

4. 优化点(常考)

增加提前终止标志,若一轮无交换,说明已有序,立即结束。

function bubbleSortOptimized(arr) {
  let n = arr.length;
  for (let i = 0; i < n - 1; i++) {
    let swapped = false; // 优化标志
    for (let j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        swapped = true;
      }
    }
    if (!swapped) break; // 本轮无交换,已有序,提前结束
  }
  return arr;
}

5. 前端应用场景

  • 适用于数据量极小的排序需求。
  • 在框架(如Vue/React)中手动排序本地数据时,可能简单使用,但实际项目中优先使用数组的 .sort()方法(其内部通常为更高效的排序,如Timsort)。

6. 一句话总结

相邻比较,大数沉底。可优化提前终止,但平均效率O(n²),适合小数据量。