在 JavaScript 中,冒泡排序(Bubble Sort) 是一种简单但效率较低的排序算法。它的基本思想是重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误(比如前一个比后一个大,在升序排序中),就交换它们的位置。这个过程会不断重复,直到整个列表有序为止。
之所以叫“冒泡”,是因为较小的元素会像气泡一样逐渐“浮”到列表的顶部(或较大的元素“沉”到底部,取决于实现方式)。
🌟 冒泡排序的基本步骤(以升序为例):
- 从第一个元素开始,依次比较相邻的两个元素。
- 如果前一个元素大于后一个元素,就交换它们。
- 继续这个过程,直到列表末尾。此时,最大的元素已经“冒泡”到了最后。
- 对剩下的未排序部分重复上述过程。
- 当某一轮遍历中没有发生任何交换,说明列表已经有序,可以提前结束。
✅ JavaScript 实现示例:
const arr = [64, 34, 25, 12, 22, 11, 90]
function bubbleSort(arr) {
let n = arr.length;
for (let i = 0; i < n - 1; i++) {
let swapped = false; // 优化:记录本轮是否发生交换
for (let j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
swapped = true;
}
}
// 如果这一轮没有交换,说明已经有序
if (!swapped) {
break;
}
}
return arr;
}
console.log(arr)
console.log('冒泡排序 ->', bubbleSort(arr))
⏱️ 时间复杂度:
- 最坏情况(逆序):O(n²)
- 最好情况(已排序):O(n)(加上优化后)
- 平均情况:O(n²)
💾 空间复杂度:
- O(1)(原地排序)
📝 小结:
冒泡排序虽然效率不高,不适合处理大规模数据,但由于其逻辑简单、易于理解,常被用于教学和算法入门。在实际开发中,通常会使用更高效的排序方法(如 Array.prototype.sort(),它在 V8 引擎中使用的是 Timsort 或快排变种)。