// 自顶向下归并排序
let arr = [0, 2, 4, 2, 3, 1]
function sort(arr) {
let len = arr.length
if (len < 2) return arr
let mid = Math.floor(len / 2) // 数组的中间位置
let left = arr.splice(0, mid) // 截取前半段
let right = arr // 剩余后半段
return merge(sort(left), sort(right)) // 先sort拆分数组,再merge合并数组
}
function merge(left, right) {
let tempArr = []
while(left.length > 0 && right.length > 0) {
if (left[0] <= right[0]) {
tempArr.push(left.shift())
} else {
tempArr.push(right.shift())
}
console.log(tempArr)
}
while(left.length) {
tempArr.push(left.shift())
}
while(right.length) {
tempArr.push(right.shift())
}
return tempArr
}
← 归并排序-数组中的逆序对 快速排序 →