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