数据结构 | 合并两个长度分别为m和n的有序表,最坏情况下需要比较m+n-1次

最坏的情况就是交叉

如:
1 3 5
2 4 6

1 3 5 7 9
2 4 8 

设上链指针p,下链q,每次比较后较小节点依次作为“合并后链表的节点”,同时较小链指针后移。某链指空后不再比较。则所给的例子:

第一步:1和2比,1小作为新节点,p移至3。

第二步,3和2比,2小作为新节点,q移至4。

第三步,3和4比,3小,p移至5。

第四步,5和4比,4小,q移至6。

第五步,5和6比,p指空。结束。

最坏的情况实质上是让两指针都走完各自的链表,同时某链肯定先走完,因为一次只移动一个指针,另一个链表无论怎样都会至少少走一步,这就是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。

 


将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是(  )

  • 2n
  • 2n-1
  • n-1
  • n

最小情况:把前一个表A中的第一个值与后一个表B相比较,发现最小的值比B的最大的值都要大,是N次,因为你没办法直接访问到最后一个元素。


 将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是__牛客网

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西皮呦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值