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的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
讲解Python中运算符使用时的优先级
May 14 Python
python实现识别相似图片小结
Feb 22 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
值得收藏的10道python 面试题
Apr 15 Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
Django 自动生成api接口文档教程
Nov 19 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 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实现给一张图片加上水印效果
2016/01/02 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
python进阶教程之异常处理
2014/08/30 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python找出因数与质因数的方法
2019/07/25 Python
Python中实现输入一个整数的案例
2020/05/03 Python
简述python Scrapy框架
2020/08/17 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
信电学院毕业生自荐书
2014/05/24 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
详解SQL报错盲注
2022/07/23 SQL Server