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 14 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
详解python中的 is 操作符
Dec 26 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
python 自动重连wifi windows的方法
Dec 18 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
Python函数的默认参数设计示例详解
Dec 01 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 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高级OOP技术演示
2009/08/27 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
CURL状态码列表(详细)
2013/06/27 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
JS高级笔记
2011/07/13 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
js实现常用排序算法
2016/08/09 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
go和python变量赋值遇到的一个问题
2017/08/31 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python程序暂停的正常处理方法
2019/11/07 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
《天安门广场》教学反思
2014/04/23 职场文书
网站创业计划书
2014/04/30 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
酒店前台辞职书
2015/02/26 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
小学科学课教学反思
2016/02/23 职场文书
Python中for后接else的语法使用
2021/05/18 Python
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
Java实现注册登录跳转
2022/06/16 Java/Android
js作用域及作用域链工作引擎
2022/07/07 Javascript