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 相关文章推荐
在Django的视图中使用数据库查询的方法
Jul 16 Python
python实现斐波那契数列的方法示例
Jan 12 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
Pytorch使用shuffle打乱数据的操作
May 20 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
php下保存远程图片到本地的办法
2010/08/08 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
python如何调用php文件中的函数详解
2020/12/29 Python
什么时候需要进行强制类型转换
2016/09/03 面试题
商务日语专业自荐信
2014/04/17 职场文书
中层干部培训方案
2014/06/16 职场文书
红色旅游心得体会
2014/09/03 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
2014年营业员工作总结
2014/11/18 职场文书
小学中等生评语
2014/12/29 职场文书
关于学习的决心书
2015/02/05 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS