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深入学习之装饰器
Aug 31 Python
详解Python中的日志模块logging
Jun 19 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python时间获取及转换知识汇总
Jan 11 Python
python列表生成式与列表生成器的使用
Feb 23 Python
python 获取当天每个准点时间戳的实例
May 22 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
python将字符串转变成dict格式的实现
Nov 18 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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反射应用示例
2014/02/25 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
Javascript实现找不同色块的游戏
2017/07/17 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
python xml解析实例详解
2016/11/14 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
pytorch数据预处理错误的解决
2020/02/20 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
次世代生活态度:Hypebeast
2018/07/05 全球购物
英文版区域经理求职信
2013/10/23 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
医生进修自我鉴定
2014/01/19 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
第二次离婚起诉书
2015/05/18 职场文书