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获取从命令行输入数字的方法
Apr 29 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python小项目之五子棋游戏
Dec 26 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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中{}大括号是什么意思
2013/12/01 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
JS中的phototype详解
2017/02/04 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
深入理解Python中的内置常量
2017/05/20 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python nmap实现端口扫描器教程
2020/05/28 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
python 串行执行和并行执行实例
2020/04/30 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
护士思想汇报
2014/01/12 职场文书
文员岗位职责范本
2014/03/08 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
五年级语文教学反思
2016/03/03 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
python中 Flask Web 表单的使用方法
2022/05/20 Python