冒泡排序是一种简单的排序算法,但它的效率也相当低,因为它最坏的情况是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,所以我们保持原样。我们跳过最后一个元素,因为我们知道,由于我们的工作流程,它总是会成为最大的元素。