合并递归
function mergeSort(array) {
if (array.length <= 1) return array
let mid = Math.floor(array.length / 2)
let left = array.slice(0, mid)
let right = array.slice(mid)
return merge(mergeSort(left), mergeSort(right))
}
function merge(a, b) {
let array
if (a.length === 0) return b;
if (b.length === 0) return a;
if (a[0] < b[0]) {
array = [a[0]].concat(merge(a.slice(1), b))
} else {
array = [b[0]].concat(merge(a, b.slice(1)))
}
return array
}
合并非递归
function mergeSort(array) {
if (array.length <= 1) return array
let mid = Math.floor(array.length / 2)
let left = array.slice(0, mid)
let right = array.slice(mid)
return merge(mergeSort(left), mergeSort(right))
}
function merge(a, b) {
let i = 0,
j = 0,
k = 0,
array = [];
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
array[k] = a[i];
k++;
i++;
} else {
array[k] = b[j];
k++;
j++;
}
}
if (i >= a.length) {
array = array.concat(b.slice(j));
} else if (j >= b.length) {
array = array.concat(a.slice(i));
}
return array
}