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实现面向对像的ASP程序实例
Nov 10 Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
使用Python设置tmpfs来加速项目的教程
Apr 17 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
Python对接支付宝支付自实现功能
Oct 10 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
JavaScript Split()方法
2015/12/18 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
vue-test-utils初使用详解
2019/05/23 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
在Python中使用判断语句和循环的教程
2015/04/25 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
python基础知识小结之集合
2015/11/25 Python
Python模拟用户登录验证
2017/09/11 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
python如何操作mysql
2020/08/17 Python
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
职专应届生求职信
2013/11/16 职场文书
项目建议书范文
2014/05/12 职场文书
淘宝客服工作职责
2014/07/11 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
学生违反校规检讨书
2014/10/28 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
婚庆答谢词
2015/01/04 职场文书