内存操作优化时为什么需要在merge函数中拷贝将要进行排序区间的元素?

来源:2-3 归并排序法的内存操作优化

怦怦

2020-09-11 13:58:37

    使用System.arraycopy()把arr数组相应位置的元素拷贝到temp数组中这一步的意义是为了让程序更健壮吗?毕竟在调用整体递归函数之前拷贝了一次,中途并没有对temp数组进行更改。

写回答

1回答

liuyubobobo

2020-09-11

不拷贝是错误的。temp 中需要放 [l, r] 区间里的元素摆放。但是在对 [l, mid] 和 [mid, r] 的处理中,我们只将排序过程反映在了 arr 数组中,没有更新 temp 数组。


把这句话删除,实际试验一下,看是不是无法通过 isSorted 的测试?


用一个小的测试用例,比如只包含 8 个元素的数组,实际调试跟踪一下,看一下没有这步拷贝,为什么排序失败了?对算法进一步的理解和进步,就在这个过程中哦。


继续加油!:)

9

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2610 学习 · 1087 问题

查看课程