发布于 2026-01-06 2 阅读
0

JavaScript 冒泡排序:面向初学者的 JavaScript 冒泡排序

JavaScript 冒泡排序:面向初学者的 JavaScript 冒泡排序

作为一个每天都要用 JavaScript 工作的人,我意识到自己对很多基本的算法任务都习以为常了,所以我决定在接下来的几周里通过博客文章深入讲解基础知识,今天就从冒泡排序开始。

什么是冒泡排序?

冒泡排序是一种通过比较数组中每个元素与其前面的元素来对数组进行排序的方法。例如,对于一个数组,[3,5,4, 2]冒泡排序函数会将“3”与“5”进行比较,然后将“5”与“4”进行比较,依此类推,直到数组排序完成。

冒泡排序的最佳方法

我目前找到/实现的最佳冒泡排序方法如下所示:

const bubbleSort = arr => {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length; i++) {
      if (arr[i] > arr[i + 1]) {
        let tmp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = tmp;
        swapped = true;
      }
    }
  } while (swapped);
  return arr;
};
Enter fullscreen mode Exit fullscreen mode

代码分解

现在让我们逐段分析这段代码。

const bubbleSort = arr => {
  let swapped;
  do {} while (swapped);
  return arr;
}
Enter fullscreen mode Exit fullscreen mode

在这里,我们初始化一个swapped变量,并设置一个 do/while 循环,当该变量swapped等于 true 时运行,然后返回数组。

下一个:

const bubbleSort = arr => {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length; i++) {
      // do stuff here  
    }
  } while (swapped);
  return arr;
}
Enter fullscreen mode Exit fullscreen mode

现在我们已经设置好函数,使其能够遍历数组中的每个元素。

下一个:

const bubbleSort = arr => {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length; i++) {
      if (arr[i] > arr[i + 1]) {
        // if element > the next element
      } 
    }
  } while (swapped);
  return arr;
}
Enter fullscreen mode Exit fullscreen mode

如果数组中的某个元素大于它后面的元素,我们就需要对它进行一些操作(交换)。

下一个:

const bubbleSort = arr => {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length; i++) {
      if (arr[i] > arr[i + 1]) {
        let tmp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = tmp;
        swapped = true;
      }
    }
  } while (swapped);
  return arr;
};
Enter fullscreen mode Exit fullscreen mode

我们需要将arr[i]元素保存到tmp变量中,因为我们将用它后面的元素的值覆盖它(arr[i+1])。然后我们将它后面的元素的值(arr[i+1])重新赋值为等于tmp

这是我目前为止对基本冒泡排序函数的最佳尝试,如果你找到了更优雅的解决方案,请告诉我!

文章来源:https://dev.to/ryan_dunton/bubble-sorting-for-beginners-in-js-2opp