SOURCE

let arr = [1,5,3,2,7,4,8,5,11,7,9,4,5]
const mergeSort = (arr,l,r)=>{
    if(l === r) return
    const m = l+Math.floor((r-l)/2)
    // 先归并排序左半边,然后归并排序右半边
    mergeSort(arr,l,m)
    mergeSort(arr,m+1,r)
    // 再将这两边合并起来
    merge(arr,l,m,r)
}

const merge = (arr,left,mid,right)=>{
    let help = [] // 辅助数组
    let p1 = left, p2 = mid+1 // 辅助指针
    while(p1 <= mid && p2 <= right){
        if(arr[p1] <= arr[p2]){
            help.push(arr[p1])
            p1++
        }else{
            help.push(arr[p2])
            p2++
        }
    }
    while(p1 <= mid){
        help.push(arr[p1])
    }
    while(p2 <= right){
        help.push(arr[p2])
    }
    let p = left
    while(help.length){
        arr[left] = help.shift()
        p++
    }
}
console.log(arr)
mergeSort(arr,0,arr.length-1)
console.log(arr)

console 命令行工具 X clear

                    
>
console