冒泡排序:一种基础的交换排序算法,通过相邻元素的两两比较和交换,将最大(或最小)的元素逐步“浮”到数列末端。
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²),适合小数据量。 ”