Merge算法实现了一次归并,接下来用Merge算法解决一趟归并的问题。
某一趟归并排序中,设各子表的长度为length(最后一个子表的长度可能小于length),则归并前R[0……n-1]中共有⌈n/length⌉个有序子表,到这里都非常好理解。
教材上给出,这几个子表为:
R[0……length-1]
R[length……2length-1]
……
R[(⌈n/length⌉)×length……n-1]
为什么最后一个子表的初始下标是(⌈n/length⌉)×length
为什么不是(⌈n/length⌉-1)×length?
——
我的理解:比如说把10个元素分成长度为2的5组,第一组是0-1,开始下标是(1-1)×2
第二组是2-3,开始下标是(2-1)×2
也就是第m(序列号)组,的开始下标应该是(m序列号-1)×2
那么最后一组的序列号应该是个数,也就是 (⌈n/length⌉)
为什么不需要-1呢?
——
按照(⌈n/length⌉)×length
可以整除的情况:取n=16,length=4
(⌈n/length⌉)×length不就等于4×4了吗??最后一个子表的下标怎么可能从16开始呢?
不可以整除的情况:n=15,length=4
(⌈n/length⌉)=4
(⌈n/length⌉)×length还是4×4=16啊
整个下标也就到n-1=14而已
百思不得其解,求解答