关于冒泡排序的初级优化
// 排序算法优化(以从小到大排序为例)
// 这种优化只是减少了外层循环次数,内层的循环次数并没有减少
function sort(arr) {
for (var i = 0; i < arr.length; i++) {
var count = 0;
console.log('第' + (i + 1) + '次外层循环');
for (var j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
var box = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = box;
} else {
count++;
}
}
if (count == arr.length - 1) {
console.log(arr);
return;
}
}
}
var a = [1, 2, 3, 4, 5, 7, 6];
// sort(a);
// sort2(a);
// 第二种与第一种一样(同样没有减少内层循环次数),只不过用标志符而不是计算来判断,第二种少了累加计算,稍好些
function sortArr(arr) {
for (var i = 0; i < arr.length; i++) {
// 标志符放在外层循环内
var boo = true;
for (var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 有交换则置为false
boo = false;
var box = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = box;
}
}
// 无交换过则停止循环
if (boo) break;
}
}
let b = [123, 45, 2334314, 5, 6, 213, 24, 90];
sortArr(b);
个人学习记录,如有更好的优化方法,感谢斧正!