JavaScript 算法-冒泡排序的实例教程

58 阅读1分钟

冒泡排序是一种简单的排序算法,但它的效率也相当低,因为它最坏的情况是O(n^2) 复杂性。

但它还是值得我们学习的。

我们在一个数组中循环,并不断地将一个项目与紧挨着它的项目进行比较。

如果右边的项目比较小,我们就把这两个位置交换。

下面是我们的实现。

const bubbleSort = (originalArray) => {
  let swapped = false

  const a = [...originalArray]

  for (let i = 1; i < a.length - 1; i++) {
    swapped = false

    for (let j = 0; j < a.length - i; j++) {
      if (a[j + 1] < a[j]) {
        ;[a[j], a[j + 1]] = [a[j + 1], a[j]]
        swapped = true
      }
    }

    if (!swapped) {
      return a
    }
  }

  return a
}

你可以看到O(n^2) ,因为我们在数组中循环了2次,以检查我们是否需要将这一项与右边的一项交换。

我们从第一个元素开始,将其与第二个元素进行比较。如果第一个元素比较大,我们就把它们交换。否则我们就保持原样,然后切换到数组的第二个元素。我们将其与第三个元素进行比较。同样,如果第2个比第3个大,我们就交换它们,我们继续交换,直到它在数组中找到自己的位置。

这里有一个例子。

假设我们运行bubbleSort([2, 1, 3])

首先我们比较2和1。2>1,所以我们交换它们。

1 2 3

然后我们将2与3进行比较,2<3,所以我们保持原样。我们跳过最后一个元素,因为我们知道,由于我们的工作流程,它总是会成为最大的元素。