对于原始的冒泡排序,我们是需要进行arr.length - 1次循环的,但可能在某次循环过程中,就已经将数组排好序了,此时我们便可以直接退出。那么,我们怎么判断数组是否已排好序呢?很简单,当在某次循环中没有发生变量交换时,就可以证明数组已经排好序了。下面的代码中的isChange就是用来标志是否存在变量交换,若不存在,则直接return结果。
function bubbleSort(arr) {
const len = arr.length
for (let i = 0; i < len - 1; i++) {
let isChange = false
for (let j = 0; j < len - i - 1; j++) {
if (arr[j + 1] < arr[j]) {
let tmp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = tmp
isChange = true
}
}
if (!isChange) return arr
}
return arr
}