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 相关文章推荐
Python计算三维矢量幅度的方法
Jun 15 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
python 批量修改/替换数据的实例
Jul 25 Python
Django实现发送邮件找回密码功能
Aug 12 Python
pandas 空数据处理方法详解
Nov 02 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
python装饰器的特性原理详解
Dec 25 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
python归并排序算法过程实例讲解
Nov 04 Python
python中复数的共轭复数知识点总结
Dec 06 Python
python实现视频压缩功能
Dec 18 Python
python实现剪贴板的操作
Jul 01 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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
用PHP实现维护文件代码
2007/06/14 PHP
PHP安全配置详细说明
2011/09/26 PHP
php实现的日历程序
2015/06/18 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python求质数列表的例子
2019/11/24 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
《值日生》教学反思
2014/02/17 职场文书
英语老师推荐信
2014/02/26 职场文书
学生保证书格式
2015/02/27 职场文书
2015年中学校长工作总结
2015/05/19 职场文书