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连接MySQL数据库实例分析
May 12 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
python实现旋转和水平翻转的方法
Oct 25 Python
Python操作Excel插入删除行的方法
Dec 10 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
python实现手势识别的示例(入门)
Apr 15 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
PHP 选项及相关信息函数库
2006/12/04 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
python thread 并发且顺序运行示例
2009/04/09 Python
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Python中生成ndarray实例讲解
2021/02/22 Python
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
有关打架的检讨书
2014/01/25 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis