js实现冒泡
冒泡排序算法实现
冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置,将较大的元素逐渐“冒泡”到数组末尾。
基础实现
function bubbleSort(arr) {
const len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
优化版本
增加标志位减少不必要的遍历,当某次遍历没有发生交换时说明数组已有序。
function optimizedBubbleSort(arr) {
const len = arr.length;
let swapped;
for (let i = 0; i < len - 1; i++) {
swapped = false;
for (let j = 0; j < len - 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;
}
双向冒泡排序
同时从左向右和从右向左进行冒泡,可以减少排序轮数。

function bidirectionalBubbleSort(arr) {
let left = 0;
let right = arr.length - 1;
while (left < right) {
for (let i = left; i < right; i++) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
}
}
right--;
for (let i = right; i > left; i--) {
if (arr[i] < arr[i - 1]) {
[arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
}
}
left++;
}
return arr;
}
性能特点
- 时间复杂度:最好情况O(n),最坏和平均情况O(n²)
- 空间复杂度:O(1),原地排序算法
- 稳定性:稳定排序算法,相同元素不会改变相对位置
冒泡排序适合小规模数据排序或教学演示,实际应用中更高效的排序算法如快速排序、归并排序更为常用。






