归并排序练习

27 阅读1分钟
// 归并排序主要思想是分治 O(nlogn),栈的深度就是Log(n),空间复杂度是O(n),实践复杂度是nlog(n)因为是先分后合
function mergeSort(arr) {
  if(arr.length<2) return arr;
  let mid=Math.floor(arr.length/2);
  let left=arr.slice(0,mid);
  let right=arr.slice(mid);
  return merge(mergeSort(left),mergeSort(right));
}

function merge(left,right) {
  let result=[];
  while(left.length&&right.length) {
    if(left[0]<=right[0]) {
      result.push(left.shift());
    }else {
      result.push(right.shift());
    }
  }
  while(left.length) {
    result.push(left.shift());
  }
  while(right.length) {
    result.push(right.shift());
  }
  return result;
}