冒泡排序:相邻两项比较:i项 i+1项 (如果i项比i+1项大)=> 交换位置
上图可以看出第一轮排序排的是5
上图可以看出第二轮排序排的是4
上图可以看出第三轮排序排的是3
上图可以看出第四轮排序排的是2
上图可以看出第五轮排序排的是1
ok,由此可以总结出,一共对比了五轮,那么这五轮是怎么来的呢,实际上取的是数组中的每一项,每一轮当中会进行四次对比,为什么会进行四次对比,因为只有五个元素,相邻两项进行对比,最后一项不需要对比,所以只会进行四次对比。ok 贴代码
function toSort(arr) {
let length = arr.length
for(let i = 0; i < length; i++) { // 每一轮的轮数,循环的轮数
for(let j = 0; j < length - 1; j ++) { // 当前对比的次数
/**
ok,看到这里可能有些大兄弟懵了,抓胸挠头,默默的点上了一根烟,骂了句grass,为什么要-1?
如果不-1,比如数组中有两项let arr = [2,3],此时的arrlength是2 arr[0] 和 arr[1] 进行对
比,ok,这一轮对比完,开始arr[1] 和 arr[2] 进行对比,arr[2]根本不存在,由此可以看出为
什么会-1 因为最后一项根本不需要对比
*/
if(arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr;
}
toSort([5,4,3,2,1])
ok,上面代码已经可以看出结果。
接下来咱们进行优化。
function toSort(arr) {
let length = arr.length
for(let i = 0; i < length; i++) { // 每一轮的轮数,循环的轮数
for(let j = 0; j < length - 1 - i; j ++) { // 当前对比的次数
/**
为什么这里又-i?
5 跟 4 对比
5 跟 3 对比
5 跟 2 对比
5 跟 1 对比
此时 [4,3,2,1,5]
4 跟 3 对比
4 跟 2 对比
4 跟 1 对比
4 还需要跟5对比吗?
此时 [3,2,1,4,5]
3 跟 2 对比
3 跟 1 对比
3 还需要跟4对比吗?
此时 [2,1,3,4,5]
2 跟 1 对比
2 还需要跟3对比吗?
此时 [1,2,3,4,5]
1 跟 2 对比
此时 [1,2,3,4,5]
实际上可以看出来,在每一轮循环当中,实际上没有必要再对比每一项。
*/
if(arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr;
}
toSort([5,4,3,2,1])