非常经典的冒泡排序
//定义要进行排序的数组
let arr = [11,5,13,17,20]
//使用for循环进行比较
for(let i = 0; i < arr.length; i++){
//设置for循环的跳出条件;不明白为什么要加这个值的可以结合下边的判断理解
let boolean = true
//内层循环 arr.length - i 的原因是每比较一轮就少比较一次,节省循环次数,从而优化
for(let j = 0; j < arr.length - i; j++){
/*
判断前一个值是否小于后一个值,如果小于则说明,后一个值比前一个值大,此时满足条件,进入位置交换;
如果小向大排序的话,只需要将此处的小于号改为大于号即可实现
*/
if(arr[j] < arr[j+1]){
//交换位置方法1:
//定义一个第三方变量 t 并赋值 前一个数值
let t = arr[j]
// 将后一个数值 赋值给 前一个,交换位置
arr[j] = arr[j+1]
//将arr[j]给到t的值 赋值给 后一个 完成位置交换
arr[j+1] = t
//交换位置方法2:
// 将两个值的和赋值给前一个
arr[j] = arr[j] + arr[j+1]
// 用两个值的和 减去 后一个的值 赋值给后一个,此时后一个的值就是前一个的值
arr[j+1] = arr[j] - arr[j+1]
//用两个值得和 减去 前一个得值 赋值给前一个;此时 前一个就是后一个得值
arr[j] = arr[j] - arr[j+1]
/**
例如: arr[j] = 1; arr[j+1] = 2
1 + 2 = 3
此时 arr[j] = 3
3 - 2 = 1
此时 arr[j+1] = 1
3 - 1 = 2
此时arr[j] = 2
位置也就交换完成了
*/
//本次有交换位置,进入下一次的循环
boolean = false
}
}
//如果boolean值为true,则说明内层循环没执行,即:所有排序已经完成,没有必要再进行循环了
if(boolean)break
}