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 相关文章推荐
EM算法的python实现的方法步骤
Jan 02 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
python实现类之间的方法互相调用
Apr 29 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 Python
python 实现兔子生兔子示例
Nov 21 Python
Python sys模块常用方法解析
Feb 20 Python
python topk()函数求最大和最小值实例
Apr 02 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
初学者学习Python好还是Java好
May 26 Python
python输入中文的实例方法
Sep 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
利用PHP创建动态图像
2006/10/09 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
python Django批量导入不重复数据
2016/03/25 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Django多数据库的实现过程详解
2019/08/01 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
通过实例解析python and和or使用方法
2020/11/14 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
社区端午节活动方案
2014/01/28 职场文书
详解Python requests模块
2021/06/21 Python
各国货币符号大全
2022/02/17 杂记
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS