优化1
冒泡排序在冒泡到最后一轮之前,可能该数组就已经有序了。
解决办法:迭代之前加个已经排序标识,在每次交换顺序时让标识为false,该次迭代没交换元素顺序,说明已经有序,直接返回。
优化2
冒泡过程中,有可能后面有一大部分元素已经有序,则我们就可避免后面已经有序的一堆元素的循环,而不是每次值排除一个元素。
解决办法:可通过前一次迭代最后一次交换的元素得到后面已有序元素长度,数组的hi等于最后一次交换位置元素下标。
代码
function bubbleSort(arr) {
let hi = arr.length
let unSorted = true
for(let i = 0;i<arr.length;i++){
if(!unSorted) return arr
let last = hi-1
for (let j = 1;j<hi;j++){
unSorted = false
if(arr[j-1]>arr[j]){
unSorted = true
let temp = arr[j-1]
arr[j-1] = arr[j]
arr[j] = temp
last = j
}
}
hi = last
}
return arr
}
console.log(bubbleSort([3,1,5,6,7,8,9,10,2]))