const arr = [1, 5, 21, 6, 78, 6, 5, 9, 41, 56, 34, 54];
const mergeSort = (arr, left, right) => {
// 只有一个元素时说明到了最底层,直接返回,无需排序
if (left === right) {
return
};
const mid = Math.ceil((left + right) / 2);
// 当left+1=right时,下面两个都会退出,然后走merge(),此时需要对左右两个只有一个元素的数组进行合并,同时判断大小,然后这层递归退出,由此往上传递
mergeSort(arr, left, mid - 1);
mergeSort(arr, mid, right);
merge(arr, left, mid, right);
}
const merge = (arr, left, mid, right) => {
const arrLeft = arr.slice(left, mid);
const arrRight = arr.slice(mid, right + 1);
const mergedArr = [];
let i = 0, j = 0;
// 遍历两个数组中的所有元素,每次只拿出最小的那个放入mergedArr中即可
while (arrLeft[i] !== undefined || arrRight[j] !== undefined) {
const leftNum = arrLeft[i], rightNum = arrRight[j];
if (leftNum !== undefined && rightNum !== undefined) {
if (leftNum <= rightNum) {
mergedArr.push(leftNum);
i++;
}
else {
mergedArr.push(rightNum);
j++;
}
}
else if (leftNum === undefined && rightNum !== undefined) {
mergedArr.push(rightNum);
j++
}
else if (leftNum !== undefined && rightNum === undefined) {
mergedArr.push(leftNum);
i++
}
}
// 排好的数组覆盖原来的数据即可
for (let i = left; i <= right; i++) {
arr[i] = mergedArr[i-left]
}
}
mergeSort(arr, 0, arr.length - 1);
console.log(arr);
归并排序----js实现
最新推荐文章于 2024-10-15 14:00:48 发布
这段代码展示了如何在JavaScript中实现归并排序算法,用分治法处理数组,适用于IT技术相关的内容社区。
摘要由CSDN通过智能技术生成