1、合并二维有序数组成一维有序数组,归并排序
归并排序:
归并排序是用分治思想,分治模式在每一层递归上有三个步骤:
分解(Divide):将n个元素分成个含n/2个元素的子序列。
解决(Conquer):用合并排序法对两个子序列递归的排序。
合并(Combine):合并两个已排序的子序列已得到排序结果。
function mergeSort(arr){
const len = arr.length;
if(len<=1){
return arr[0]
}
const mid = Math.floor(len/2);
const leftArr = mergeSort(arr.slice(0,mid));
const rightArr = mergeSort(arr.slice(mid,len));
arr = mergeArr(leftArr,rightArr);
return arr;
}
function mergeArr(arr1,arr2){
let i = 0,j=0;
const res = [];
const len1 = arr1.length;
const len2 = arr2.length;
while(i<len1 && j<len2){
if(arr1[i] < arr2[j]){
res.push(arr1[i]);
i++
}else{
res.push(arr2[j]);
j++;
}
}
if(i<len1){
return res.concat(arr1.slice(i))
}else{
return res.concat(arr2.slice(j))
}
}
var arr = [[1,2,4],[2,3,7],[3,5,7],[4,5,8]]
mergeSort(arr)