/** * 冒泡排序 * 思想:当前项 和 后一项 进行对比, 如果当前项大于后者 则 调换位置 * 执行 * 1.循环数组 arr.length-1 (这里只是代表数组长度调用次数) * 2. 嵌套二次循环 arr.length -1 -i (每次循环最大值已经放到最后位置) * 3.判断 当前值 和 后者 如 为 true * 4.当前值保存为变量,当前值 替换为 后者,在把后者替换为 之前保留的变量 * 5.继续循环 */ // [10, 9, 8, 40, 70, 6, 15] length:8 // 结果 :[9, 8, 10, 40, 6, 15, 11, 70] 内层第1次 调用7次 i = 0 length:7 j:0 Clength:7 // 结果 :[8, 9, 10, 6, 15, 11, 40, 70] 内层第2次 调用6次 i = 1 length:7 j:1 Clength:6 // 结果 :[8, 9, 6, 10, 11, 15, 40, 70] 内层第3次 调用5次 i = 2 length:7 j:2 Clength:7 // 结果 :[8, 6, 9, 10, 11, 15, 40, 70] 内层第4次 调用4次 i = 3 length:7 j:3 Clength:4 // 结果 :[6, 8, 9, 10, 11, 15, 40, 70] 内层第5次 调用3次 i = 4 length:7 j:4 Clength:3 // 结果 :[6, 8, 9, 10, 11, 15, 40, 70] 内层第6次 调用2次 i = 5 length:7 j:5 Clength:2 // 结果 :[6, 8, 9, 10, 11, 15, 40, 70] 内层第7次 调用1次 i = 6 length:7 j:6 Clength:1 /** * 比较顺序 是由小到大 想要 由大到小 把最里面的比较改变即可 */ let arrs = [10, 9, 8, 40, 70, 6, 15, 11]; function demo(arr) { let num = null; // 外层循环 控制i 控制比较的轮数 for (let i = 0; i < arr.length-1; i++) { //内循环 控制每一轮的比较次数 for (let j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { num = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = num } } console.log(i,arr) // if(i=0) return false; } return arr } console.log(demo(arrs))