冒泡排序
// 逐步分析后做优化
1 首先循环 遍历拿到数组中的所有数
方法1:
for (var i = 0; i < arr.length; i++) {
}
方法2:
for (var i = 0; i <= arr.length-1; i++) {
}
这个很好理解吧!!
2 然后在循环中需要做判断:
对比数组前一项和后一项 如果满足前一项大, 就往后挪 否则无操作
这里就是冒泡的思想 第一个数字循环和数组中其他所有数做一次判断
if (arr[i] > arr[i + 1]) {
// 定义临时变量 给两个索引i,i+1做交换 这里看不懂可以退出了~
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// 举例 :第一个和第二个值做交换
// var temp = arr[0]
// arr[0] = arr[1]
// arr[1] = temp
// console.log(arr)
然后我们得到
利用for循环 和if() 可以实现 :
// for (var i = 0; i < arr.length; i++) {
// if (arr[i] > arr[i + 1]) {
// 给两个索引做交换 值也跟着交换
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
而我们目前循环只是把数组中的第一个数做了和其他数的一轮循环,此时我们需要给所有数字都做判断
所以我们可以在外层再用一个循环
目的:给数组中的每个数字依次循环和其他数字做循环判断
外层循环:
for (var k = 0
}
// 合并后得到基础版
//var arr = [7, 3, 6, 2, 4, 1, 8, 5, 0]
// for (var k = 0
// for (var i = 0
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// }
// console.log('原始数组: ', arr)
// 优化1
一轮中单个数字循环比较到 倒数第二项时 最后一次比较 就没有意义了 因为已经确定了其位置
// for (var k = 0
// for (var i = 0
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// }
// 优化2
/**
* k == 0 第 1 次循环 确定了 [8] 的值
* k == 1 第 2 次循环 确定了 [7][8] 的值
* k == 2 第 3 次循环 确定了 [6][7][8] 的值
* k == 3 第 4 次循环 确定了 [5][6][7][8] 的值
* k == 4 第 5 次循环 确定了 [4][5][6][7][8] 的值
* k == 5 第 6 次循环 确定了 [3][4][5][6][7][8] 的值
* k == 6 第 7 次循环 确定了 [2][3][4][5][6][7][8] 的值
* k == 7 第 8 次循环 确定了 [1][2][3][4][5][6][7][8] 的值
* k == 8 第 9 次循环 确定了 [0][1][2][3][4][5][6][7][8] 的值
*/
// for (var k = 0
// for (var i = 0
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// }
// 优化3
// for (var k = 0
// console.log(`这是第 ${k + 1} 轮循环(k == ${k})`)
// for (var i = k+1
// console.log(arr[i], arr[i + 1])
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// }
// console.log('冒泡排序结束后的arr: ', arr)