SOURCE

// 思路
// 需要遍历 length - 1 次
// 每一次遍历
// 都从后往前进行比较,
// 相邻的两两比较大小,小的向前浮动
// 时间复杂度 O(n^2)

function bubbleSort(target) {
    let temp = null

    for(let i = 0; i < target.length - 1; i++) {
        for(let j = target.length - 1; j > i; j--) {
            if (target[j] < target[j - 1]) {
                temp = target[j]
                target[j] = target[j - 1]
                target[j - 1] = temp
            }
        }

        console.log(`第 ${i + 1} 次排序`)
    }

    return target
}

console.log(bubbleSort([23, 32, 5, 72, 12, 1]))
// 缺点
// 当目标对象是已经排序好的数据
// 也需要进行多次遍历
console.log(bubbleSort([1, 2, 3, 4, 5, 6]))

// 优化
// 定义一个布尔值
// 在遍历每一次的时候,如果发生位置交换,就改变布尔值
// 当这一次循环结束之后,判断该布尔值是否变化
// 变化了则继续下一次,没变则退出
function bubbleSort(target) {
    let temp = null
    let flag = false

    for(let i = 0; i < target.length - 1; i++) {
        for(let j = target.length - 1; j > i; j--) {
            if (target[j] < target[j - 1]) {
                temp = target[j]
                target[j] = target[j - 1]
                target[j - 1] = temp
                flag = true
            }
        }

        console.log(`第 ${i + 1} 次排序`)
        if (!flag) break
    }

    return target
}
console 命令行工具 X clear

                    
>
console