SOURCE

// 思路
// 用两层循环 外层控制冒泡终点位置
// 因为每次冒泡完都会将最大/小值放到末尾 不用参与排序 因此排除在外
// 里层循环控制单趟排序 相邻元素两两对比交换

function fn(list) {
    let len = list.length
    // 注意 是<len-1 而不是<len 因为是当前元素和后一位对比 因此只取到末尾元素的前一个
    for (let j = 0; j < len - 1; j++) {
        for (let k = 0; k < len - 1 - j; k++) {
            if (list[k] > list[k + 1]) {
                [list[k], list[k + 1]] = [list[k + 1], list[k]]
            }
        }
    }
}

// 验证
let list = [34, 8, 64, 51, 32, 21]
fn(list)
console.log('冒泡排序:' + list) // 8,21,32,34,51,64
console 命令行工具 X clear

                    
>
console