Python3合并两个有序数组代码实例


Posted in Python onAugust 11, 2020

第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)

第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好)

第二种思路的排序算法与测试代码如下:

def merge_sort(a, b):
  ret = []
  while len(a)>0 and len(b)>0:
    if a[0] <= b[0]:
      ret.append(a[0])
      a.remove(a[0])  
    if a[0] >= b[0]:
      ret.append(b[0])
      b.remove(b[0])
  if len(a) == 0:
    ret += b
  if len(b) == 0:
    ret += a
  return ret


if __name__ == '__main__':
  a = [1,3,4,6,7,78,97,190]
  b = [2,5,6,8,10,12,14,16,18]
  print(merge_sort(a, b))

反思了一下上面的过程,不应该用remove方法,因为仔细想一下remove方法可能比较耗时,不算最简单。

改进一下,改用索引元素比较法替代头位元素比较法:

def merge_sort(a, b):
  ret = []
  i = j = 0
  while len(a) >= i + 1 and len(b) >= j + 1:
    if a[i] <= b[j]:
      ret.append(a[i])
      i += 1
    else:
      ret.append(b[j])
      j += 1
  if len(a) > i:
    ret += a[i:]
  if len(b) > j:
    ret += b[j:]
  return ret

if __name__ == '__main__':
  a = [1,3,4,6,7,78,97,190]
  b = [2,5,6,8,10,12,14,16,18]
  print(merge_sort(a, b))

这个基本就是最简单的方法了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
Python语言描述连续子数组的最大和
Jan 04 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Django中自定义查询对象的具体使用
Oct 13 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
python的链表基础知识点
Sep 13 Python
python单元测试框架pytest的使用示例
Oct 07 Python
Python基于gevent实现文件字符串查找器
Aug 11 #Python
Python3如何实现Win10桌面自动切换
Aug 11 #Python
Python3如何使用多线程升程序运行速度
Aug 11 #Python
使用Python pip怎么升级pip
Aug 11 #Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 #Python
Python 代码调试技巧示例代码
Aug 11 #Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 #Python
You might like
Apache2 httpd.conf 中文版
2006/11/17 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
javascript 日期时间 转换的方法
2013/02/21 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
canvas绘制多边形
2017/02/24 Javascript
深入理解vue中的$set
2017/06/01 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
关于js中的鼠标事件总结
2017/07/11 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
个人找工作的自我评价
2013/10/17 职场文书
毕业设计说明书
2014/05/07 职场文书
焦裕禄观后感
2015/06/03 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
go xorm框架的使用
2021/05/22 Golang
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android