返回
用JavaScript实现冒泡排序(详解双向冒泡排序)
前端
2023-12-27 14:27:10
冒泡排序(Bubble Sort)是一种简单的排序算法,基于以下原理:它反复遍历数组,每次将相邻元素进行比较,如果顺序错误,就交换它们的位置。这种遍历和比较的过程一直持续到没有更多需要交换的元素为止。
算法步骤
以下是冒泡排序算法的步骤:
- 从数组的第一个元素开始,将其与下一个元素进行比较。
- 如果第一个元素大于第二个元素,则交换这两个元素的位置。
- 继续比较第二个元素与第三个元素,如果第二个元素大于第三个元素,则交换这两个元素的位置。
- 依次类推,直到比较到数组的最后一个元素。
- 重复步骤1到4,直到数组完全排序。
JavaScript实现
function bubbleSort(array) {
let swapped;
do {
swapped = false;
for (let i = 0; i < array.length - 1; i++) {
if (array[i] > array[i + 1]) {
let temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
return array;
}
双向冒泡排序
双向冒泡排序是冒泡排序的一种优化版本,它同时从数组的两端向中间遍历,并交换错误顺序的元素。这种双向遍历可以减少比较次数,从而提高算法的效率。
function bidirectionalBubbleSort(array) {
let left = 0;
let right = array.length - 1;
let swapped = true;
while (left < right && swapped) {
swapped = false;
// 从左到右遍历
for (let i = left; i < right; i++) {
if (array[i] > array[i + 1]) {
let temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
swapped = true;
}
}
right--;
// 从右到左遍历
for (let i = right; i > left; i--) {
if (array[i] < array[i - 1]) {
let temp = array[i];
array[i] = array[i - 1];
array[i - 1] = temp;
swapped = true;
}
}
left++;
}
return array;
}
空间复杂度和时间复杂度
冒泡排序的时间复杂度为O(n^2),因为最坏情况下需要比较每个元素多次。空间复杂度为O(1),因为只需要很少的额外空间来存储临时变量。双向冒泡排序的时间复杂度也为O(n^2),但由于减少了比较次数,因此通常比普通冒泡排序更快。
结论
冒泡排序是一种简单而有效的排序算法,特别适用于小型数组。双向冒泡排序是冒泡排序的一种优化版本,可以减少比较次数,提高算法的效率。