2 回答
TA贡献1839条经验 获得超15个赞
“第一步”执行将两个源数组合并到目标数组的工作。当L
或R
耗尽时,另一个源数组中可能仍然存在未合并的元素。“第二步”用于将任何剩余元素复制L
到目标。“第三步”也有同样的目的R
。
TA贡献1836条经验 获得超5个赞
您可以选择跳过这些步骤并仅使用 for 循环(如果通过以下方式对您来说更容易):
for(int i = 0; i < arr.size(); i++) {
if(r >= right.size() || (l < left.size() && left[l] < right[r])) {
arr[i] = left[l++];
} else {
arr[i] = right[r++];
}
}
arr.size() = n1 + n2 in your implementation
甚至这个:
while(len--) {
if(r >= right.size() || (l < left.size() && left[l] < right[r])) {
arr[i] = left[l++];
} else {
arr[i] = right[r++];
}
}
where len = n1 + n2
我个人认为这种方式更具可读性和更容易,但对每个人来说都是如此!(这是不稳定的,可以变得稳定,但我把这部分留给读者去弄清楚!)
编辑:我注意到它是java,也许len--无法在循环内len >= 0工作。len--
添加回答
举报