问:长度分别为m和n的有序表A,B,合并过程中最坏的比较次数为什么是m+n-1。
答:
无论你的有序表使用数组还是链表存储,合并有序表的方法通常使用双指针法。合并的结果要产生新表C,它包含表A、B的所有元素,并且顺序和表A、B一致。因此讨论比较次数乃至最坏比较次数要建立在理解双指针法的基础上,最高赞的答案已经给出了流程,这里不再赘述。
这里给出更一般的结论——最差的情况是所有元素都比较过。每比较一次就往表C里放一个元素,也就是说排完m+n-1个元素比较了m+n-1次。那还剩最后一个元素怎么办?很简单,最后一个元素直接放到表C的表尾就可以了。所以总共是m+n-1次。
举一个例子,假设有序表为升序。长度为m的有序表的前m-1个元素都小于长度为n的有序表的第1个元素,第m个元素大于长度为n的有序表的n个元素(即所有元素),这样比较次数就是m-1+n。