js实现冒泡算法
冒泡排序算法实现
冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换顺序错误的元素,直到整个数组有序。
基本实现
function bubbleSort(arr) {
let 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) {
let 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 cocktailSort(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 - 1] > arr[i]) {
[arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
}
}
left++;
}
return arr;
}
性能说明
冒泡排序的时间复杂度为O(n²),空间复杂度为O(1)。虽然简单易懂,但不适合处理大规模数据。优化版本和双向版本可以在某些情况下减少不必要的比较和交换。







