← 返回学科目录

归并排序可视化

分治策略 · 递归之美 · 合并艺术
📊 数组操作视图
当前操作
等待开始...
当前子数组范围
-
步骤计数
0
默认元素
比较中
已选中
左子数组
右子数组
已排序
🌳 递归树视图
// 归并排序主函数
function mergeSort(arr, left, right) {
if (left < right) {
let mid = Math.floor((left + right) / 2);
mergeSort(arr, left, mid); // 递归排序左半部分
mergeSort(arr, mid + 1, right); // 递归排序右半部分
merge(arr, left, mid, right); // 合并两个有序数组
}
}
// 合并函数
function merge(arr, left, mid, right) {
let temp = [];
let i = left, j = mid + 1;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp.push(arr[i]); i++;
} else {
temp.push(arr[j]); j++;
}
}
while (i <= mid) { temp.push(arr[i]); i++; }
while (j <= right) { temp.push(arr[j]); j++; }
for (let k = left; k <= right; k++) {
arr[k] = temp[k - left];
}
}
待排序元素 已合并有序 当前比较