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 文件读写操作实例详解
Mar 12 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
python的mysqldb安装步骤详解
Aug 14 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
python pandas 时间日期的处理实现
Jul 30 Python
python sorted函数原理解析及练习
Feb 10 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
Python MD5文件生成码
2009/01/12 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Python对excel文档的操作方法详解
2018/12/10 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
小学生期末评语
2014/04/21 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
工作检讨书怎么写
2015/01/23 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL