归并排序是一种经典的排序算法,它将待排序数组不断划分成更小的数组,直到每个小数组只有一个元素,然后再将这些小数组合并成一个有序的大数组。
以下是使用 JavaScript 封装的归并排序算法:
function mergeSort(arr) {
if (arr.length <= 1) {
return arr;
}
const middle = Math.floor(arr.length / 2);
const leftArr = arr.slice(0, middle);
const rightArr = arr.slice(middle);
return merge(mergeSort(leftArr), mergeSort(rightArr));
}
function merge(leftArr, rightArr) {
let leftIndex = 0;
let rightIndex = 0;
const result = [];
while (leftIndex < leftArr.length && rightIndex < rightArr.length) {
if (leftArr[leftIndex] < rightArr[rightIndex]) {
result.push(leftArr[leftIndex]);
leftIndex++;
} else {
result.push(rightArr[rightIndex]);
rightIndex++;
}
}
return result.concat(leftArr.slice(leftIndex)).concat(rightArr.slice(rightIndex));
}
这个归并排序算法使用了递归的思想,将待排序数组划分成更小的数组,然后逐层返回合并后的有序数组。merge 函数用于将两个有序数组合并成一个有序数组。