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