归并排序是一种分支算法,其思想是将原始数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,知道最后只有一个排序完毕的大数组,是递归的。
function mergeSort(arr) {
let array= mergeSortRec(arr);
console.log('array', array);
}
function mergeSortRec(arr){
let length = arr.length;
if (length === 1) return arr;
let mid = Math.floor(length / 2);
let left = arr.slice(0, mid);
let right = arr.slice(mid, length);
return merge(mergeSortRec(left), mergeSortRec(right));
}
function merge(left, right) {
let result = [];
let il = 0, ir = 0;
while(il < left.length && ir < right.length) {
if (left[il] < right[ir]) {
result.push(left[il++]);
} else {
result.push(right[ir++]);
}
}
while(il < left.length) {
result.push(left[il++]);
}
while(ir < right.length) {
result.push(right[ir++]);
}
return result;
}
mergeSort([8,7,7,8,9,3,2,1]);