最坏的情况就是交叉

如:
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个元素的有序表归并成一个有序表,最少的比较次数是__牛客网

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

  1. 设有6个有序表A、B、C、D、E、F,分别含有10、35、40、50、60和200个数据元素,各表中元素按升序排列。要求通过5次两两合并,将6个表最终合并成1个升序表,并在最坏情况下比较的总次数达到最

    设有6个有序表A.B.C.D.E.F,分别含有10.35.40.50.60和200个数据元素,各表中元素按升序排列.要求通过5次两两合并,将6个表最终合并成1个升序表,并在最坏情况下比较的总次数达到最 ...

  2. 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数

    最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...

  3. 数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析

    冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序.在这种情况下,每一次比较都需要进行交换运算. 举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排 ...

  4. excel合并两列内容_不要再粘粘粘,合并Excel表格数据,3秒完成

    原创作者: 兰色幻想-赵志东 转自: Excel精英培训 一般情况下,两列数据需要合并,我会推荐用简单的公式: =A2&B2 二般情况下,再连接就不行了,比如C列连接后百分比变成了小数.这时就 ...

  5. c语言 数组二合一,C语言合并两个数组并去重

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 给定含有m.n个元素的两个有序(非降序)整型数组a和b. 合并两个数组中的元素到整型数组c ...

  6. C++在不使用任何算术运算符的情况下将两个数字相加(附完整源码)

    C++在不使用任何算术运算符的情况下将两个数字相加 C++在不使用任何算术运算符的情况下将两个数字相加完整源码(定义,实现,main函数测试) C++在不使用任何算术运算符的情况下将两个数字相加完整源 ...

  7. 两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法

    题目:问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损.现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2 ...

  8. fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表

    原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...

  9. 【数据结构】实现:合并两个升序的单链表,合并之后的链表后依旧有序

    最近学习数据结构的算法的过程中,遇到了一个题,然后视频讲解的老师并没有给出答案(可能是我没找到),于是我就自己动手实现了一波.如有问题,请大家支点 核心思路 校验两个链表的长度,如果都为null,直接 ...

最新文章

  1. 密封表贴电感的漏磁以及在150kHz导航信号放大器中的性能
  2. Java在游戏服务器开发中的应用
  3. REVERSE-PRACTICE-BUUCTF-21
  4. [SDOI2013]直径
  5. 【LaTeX】LaTeX安装美赛模板(mcmthesis)使用笔记(含代码)
  6. 设计模式-04-行为型模式详解
  7. 笔记︱精准营销解决方式以及营销组合评估
  8. 数据挖掘:Bloom filter
  9. 电子设计大赛应该准备什么
  10. android社交软件源码,Android 社交App+java web后台整套源代码
  11. matlab chrom(i pos),Matlab遗传算法问题 MATLAB遗传算法
  12. “天外来客”讲述太阳系“童年”故事
  13. 南京地铁行业发展策略与运营建设规模分析报告2022版
  14. 字节跳动做教育能否摆脱互联网公司“流量魔咒”?
  15. html根据ip和mac地址,关于怎么通过IE浏览器获取客户端的IP地址和Mac地址
  16. 小程序推荐——那些好用实用的小程序(图片类、资讯类、工具类)
  17. 写给全球Web3er:“低碳时代”下的Web3,何去何从?
  18. 什么是信息增益(Information Gain)
  19. 人月神话(五)未雨绸缪、干将莫邪、整体部分
  20. 红蓝cp未能连接到服务器,红蓝CP产品分析

热门文章

  1. 安卓miracast花屏_EMUI 10.1 Cast+无线投屏 让你开启“0”花屏新体验
  2. 【python安装】错误——“User installations are disabled via policy on the machine”
  3. 100条超实用微信营销技巧:公众号、朋友圈和微信营销
  4. ORACLE 金额转大写中文
  5. 基于Matlab的电磁场与波“电磁波的入射、反射、透射”仿真—(可实现波形入射反射过程的仿真)
  6. VScode代码格式化及语法检测
  7. CAD修复块中心点问题(网页版)
  8. vuepress-theme-reco评论管理
  9. 【笔记】C++ 命令行小游戏 节奏大师(别踩白块) 的制作
  10. iOS字体大小适配的几种方法