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中返回字典键的值的values()方法使用
May 22 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
python绘制立方体的方法
Jul 02 Python
wxPython的安装与使用教程
Aug 31 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
python的常见矩阵运算(小结)
Aug 07 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
Python基于smtplib协议实现发送邮件
Jun 03 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
Javascript 学习笔记 错误处理
2009/07/30 Javascript
document.write的几点使用心得
2014/05/14 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python遍历小写英文字母的方法
2019/01/02 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
python用700行代码实现http客户端
2021/01/14 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
《生命 生命》教学反思
2014/04/19 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
销售团队获奖感言
2014/08/14 职场文书
倡议书的格式写法
2015/04/28 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
灵魂歌王观后感
2015/06/17 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫