内存操作优化时为什么需要在merge函数中拷贝将要进行排序区间的元素?
来源:2-3 归并排序法的内存操作优化
怦怦
2020-09-11 13:58:37
使用System.arraycopy()把arr数组相应位置的元素拷贝到temp数组中这一步的意义是为了让程序更健壮吗?毕竟在调用整体递归函数之前拷贝了一次,中途并没有对temp数组进行更改。
1回答
不拷贝是错误的。temp 中需要放 [l, r] 区间里的元素摆放。但是在对 [l, mid] 和 [mid, r] 的处理中,我们只将排序过程反映在了 arr 数组中,没有更新 temp 数组。
把这句话删除,实际试验一下,看是不是无法通过 isSorted 的测试?
用一个小的测试用例,比如只包含 8 个元素的数组,实际调试跟踪一下,看一下没有这步拷贝,为什么排序失败了?对算法进一步的理解和进步,就在这个过程中哦。
继续加油!:)
相似问题