【发布时间】:2022-11-20 01:50:48
【问题描述】:
我正在尝试弄清楚这个功能是如何运作的,
function mergeSort(a) {
if (a.length === 1) return a;
const mid = Math.trunc(a.length / 2);
const left = mergeSort(a.slice(0, mid));
const right = mergeSort(a.slice(mid));
const result = [];
((l, r) => {
let i = 0,
j = 0;
while (i < l.length && j < r.length) {
l[i] < r[j] ? result.push(l[i++]) : result.push(r[j++]);
}
while (i < l.length) result.push(l[i++]);
while (j < r.length) result.push(r[j++]);
})(left, right);
return result;
}
const random = [10, 5, 2, 7, 3, 4];
我不明白是什么在记忆中保留了左侧/右侧。
在第一次迭代中,立即调用函数表达式 (IIFE) 具有参数 [5,2],因为返回了 [1]。然后它对 [5,2] 进行排序。那么为什么 IIFE 再次运行排序左[10],右[2,5]?是什么导致了这个动作?
【问题讨论】:
-
您是否使用调试器来跟踪执行?如果不是,为什么不呢?
-
函数的哪一部分让您感到困惑?检查合并排序可视化可能是个好主意。它使理解递归算法变得更容易。
标签: javascript