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