// 思路
// 需要遍历 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