
# 冒泡排序
通过相邻元素比较和交换,使得每一趟循环都能找到未排序的子数组。
# 实现
function bubbleSort(list) {
var n = list.length
if(!n) return []
for(var i = 0; i < n; i++) {
for(var j = 0; j < n - i - 1; j++) {
if(list[j] > list[j + 1]) {
var temp = list[j + 1]
list[j + 1] = list[j]
list[j] = temp
}
}
}
return list
}
@前端进阶之旅: 代码已经复制到剪贴板
# 优化
# 单向冒泡
标记在一轮比较汇总中,如果没有需要交换的数据,说明数组已经是有序的,可以减少排序循环的次数。
function bubbleSort(list) {
var n = list.length
if(!n) return []
for(var i = 0; i < n; i++) {
let mark = true // 如果在一轮比较中没有出现需要交换的数据,说明数组已经是有序的
for(let j = 0; j < n - i - 1; j++) {
if(list[j] > list[j + 1]) {
var temp = list[j + 1]
list[j + 1] = list[j]
list[j] = temp
mark = false
}
}
if(mark) break
}
return list
}
@前端进阶之旅: 代码已经复制到剪贴板
# 双向冒泡
普通冒泡排序一轮只找到最大值或最小值其中之一,双向冒泡则多一轮筛选,既可以找到最大值,也可以找到最小值。
function bubbleSort(list) {
var low = 0
var high = list.length - 1
while(low < high) {
var mark = true
// 找到最大值放在右边
for(var i = low; i < high; i++) {
if