非常經典的冒泡排序
//定義要進行排序的數組
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
}