优化原理
记录内层循环中, 相邻的元素交换位置的次数.
内层循环只比较,相邻的元素没有发生交换, 说明数组已经有序.
跳外层出循环结束排序.
最好情况,该算法复杂度是 O(n)
最坏情况,是一个等差数列, O(n^2) 与 普通版循环次数无区别
var arr = [12, 0, 1, 2, 4, 3, 5, 333];
function maoPao(arr) {
var n = arr.length;
for(let i=0; i<n; i++){ // 总循环次数等于数组长度
let len = n - i; // 递减比较的长度
var count = 0;
for(let v=0; v<len; v++){ // 限定比较的索引值
if(arr[v] > arr[v+1]){
[arr[v], arr[v+1]] = [arr[v+1], arr[v]];
count += 1; // 交换计数
}
}
console.log(count);
if(count == 0 ) break;
}
return arr;
}
console.log(
maoPao(arr)
);