一、归并排序
归并排序是一种分而治之的算法,思想是将原数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,直到最后只有一个排完序的大数组。JavaScript的Array类定义了一个sort函数,我们自己不用去实现,浏览器厂商可以自行去实现,比如Mozilla Firefox使用归并排序实现
二、js实现
由于是分治法,我们要将算法分为两个函数
1.第一个负责将大数组分为多个小数组并调用来排序的辅助函数
function mergeSort(arr) {
if (arr.length === 1) return arr;
const midIdx = Math.floor(arr.length / 2);
return merge(mergeSort(arr.slice(0, midIdx)), mergeSort(arr.slice(midIdx)));
}
2.将两个有序数组合并为一个有序数组
function merge(leftArr, rightArr) {
let temp = [];
while (leftArr.length > 0 && rightArr.length > 0) {
if (leftArr[0] < rightArr[0]) {
temp.push(leftArr.shift());
} else {
temp.push(rightArr.shift());
}
}
return temp.concat(leftArr).concat(rightArr);
}