// 需求:冒泡排序。
// 理论:1.比较轮数n-1。 2.比较次数n-1。 3.符合某个条件交换位置。
// 核心:双重for循环。
// 步骤:
var arr = [7, 6, 5, 4, 3, 2, 1];
console.log(arr); // => [7, 6, 5, 4, 3, 2, 1]
// 如果比较完毕提前结束比较(判断,如果本轮比较没有移动任何元素,那么说明已经比较完成)
var m = 0;
var n = 0;
// 1.双重for循环。(外循环控制轮数)
for (var i = 0; i < arr.length - 1; i++) {
// 开闭原则(写在第一个for循环里面,是为了每轮比较初始化bool变量为true)
var bool = true;
// 2.指定轮数和次数。(内循环控制次数)
for (var j = 0; j < arr.length - 1 - i; j++) {
// 3.判断是否符合标准。如果符合标准交换位置。
// 从小到大排列,如果前面比后面大,那么交换位置。
// if (arr[j] > arr[j + 1]) {
// // var temp = arr[j + 1];
// // arr[j + 1] = arr[j];
// // arr[j] = temp;
// // 简写:
// [arr[j + 1], arr[j]] = [arr[j], arr[j + 1]];
// bool = false;
// }
// 简写:
arr[j] > arr[j + 1] ? (([arr[j + 1], arr[j]] = [arr[j], arr[j + 1]]), (bool = false)) : "什么都不做";
m++;
}
n++;
// bool这个变量默认值为true;如果本轮比较有一对元素相互交换位置,那么也不能跳出循环
// 但是,如果本轮比较没有任何元素相互交换位置,那么说明上一轮就已经比较完成,可以跳出循环
if (bool) {
break;
}
}
console.log(arr); // => [1, 2, 3, 4, 5, 6, 7]
console.log(m); // => 21次
console.log(n); // => 6轮