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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
Python实现注册、登录小程序功能
Sep 21 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
python多进程(加入进程池)操作常见案例
Oct 21 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
关于Python OS模块常用文件/目录函数详解
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 rsa加密解密使用方法
2015/04/27 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
jQuery的框架介绍
2016/05/11 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
Python最长公共子串算法实例
2015/03/07 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python实现图像的垂直投影示例
2020/01/17 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
Python与C/C++的相互调用案例
2021/03/04 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
德国网上超市:myTime.de
2019/08/26 全球购物
施工安全责任书
2014/04/14 职场文书
法律顾问服务方案
2014/05/15 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书