关于归并过程的偏移
来源:1-3 实现归并过程
LambertJiang
2020-08-26 21:15:36
老师,我还是没太理解您说的为什么要做这个偏移量的判断,如果这个位置进行递归的话什么情况会出现出错的情况
1回答
merge(E[] arr, int l, int mid, int r) 要处理的是 arr 从 l 到 r 的元素。
E[] temp = Arrays.copyOfRange(arr, l, r + 1); 一句话以后,temp 的索引范围是 0 到 r - l + 1。
比如 l = 4, r = 7。
得到的 temp 含有 4 个元素,即是 temp[4] 的。
temp[0] 对应 arr[4]
temp[1] 对应 arr[5]
temp[2] 对应 arr[6]
temp[3] 对应 arr[7]
他们之间有 4 的偏移,因此在下面的逻辑中,就要处理这个偏移。
试一试,如果不处理偏移,我们的算法会不会出问题?
如果出了问题,使用一个小数据,比如只包含 8 个测试用例的数据,实际单步跟踪一下,看一看问题出在哪里?为什么会有这样的问题?
加油!:)