SOURCE

function mergeSort(array) {
  mergeSortCore(array, 0, array.length - 1);
  return array;
}

function mergeSortCore(array, left, right) {
  // 退出条件:左右索引相同说明已经只有一个数
  if (left === right) return;

  // 等同于 `left + (right - left) / 2 位运算比四则运算快
  let mid = parseInt(left + ((right - left) >> 1)); // 爆栈警告
  mergeSortCore(array, left, mid);
  mergeSortCore(array, mid + 1, right);

  let help = [];
  let i = 0;

  let p1 = left;
  let p2 = mid + 1;
  while (p1 <= mid && p2 <= right) {
    help[i++] = array[p1] < array[p2] ? array[p1++] : array[p2++];
  }
  while (p1 <= mid) {
    help[i++] = array[p1++];
  }
  while (p2 <= right) {
    help[i++] = array[p2++];
  }
  
  for (let i = 0; i < help.length; i++) {
    array[left + i] = help[i];
  }
  return array;
}


let arr = [10, 3, 1, 5, 11, 2, 0, 6, 3];
console.log('sort', mergeSort(arr))
console 命令行工具 X clear

                    
>
console