let arr = [3,1,4,5,2,3,666,12,434,43,35,45,2242]
// 方法1
function sort (arr) {
let len = arr.length
for (let i = 0; i < len; i++) { // 外层循环用于控制从头到尾的比较+交换到底有多少轮
// 内层循环用于完成每一轮遍历过程中的重复比较+交换
// 因为最大要比较到 j + 1范围,所以 j < len - 1 - i
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j+1], arr[j]]
}
}
}
return arr
}
console.log(sort(arr))
// 方法2
const sort = (arr) => {
if (!arr) return arr
let flag = false
for (let i = 0; i < arr.length; i++) {
let k = 0
while(k < arr.length - 1 - i) {
if (arr[k] > arr[k + 1]) {
arr = exchange(arr, k, k + 1)
// 只要发生了一次交换,就修改标志位
flag = true
}
k++
}
// 若一次交换也没发生,则说明数组有序,直接放过
if (!flag) return arr
}
return arr
}
const exchange = (arr, i, j) => {
[arr[i], arr[j]] = [arr[j], arr[i]]
return arr
}
console.log(sort([5,4,3,2,1]))