归并排序
function mergeTwoSorteds(left,right){
let n1 = left.length, n2 = right.length;
if(left[n1-1] <= right[0]){
return left.concat(right)
}
if(right[n2-1] <= left[0]){
return right.concat(left)
}
let tmp = []
let k = 0, j = 0
while(k < n1 && j < n2){
if(left[k] <= right[j]){
tmp.push(left[k])
k++
}else{
tmp.push(right[j++])
}
}
if(k<n1){
tmp = tmp.concat(left.slice(k))
}
if(j<n2){
tmp = tmp.concat(right.slice(j))
}
return tmp
}
function mergeSort (arr){
let len = arr.length
if(len <=1)return arr
let middle = Math.floor(len/2)
let left = arr.slice(0,middle)
let right = arr.slice(middle)
let leftSplited = mergeSort(left)
let rightSplited = mergeSort(right)
return mergeTwoSorteds( leftSplited, rightSplited )
}