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 相关文章推荐
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Python创建日历实例
Aug 21 Python
Python实现的一个找零钱的小程序代码分享
Aug 25 Python
Python爬取读者并制作成PDF
Mar 10 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
python批量解压zip文件的方法
Aug 20 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
解决numpy数组互换两行及赋值的问题
Apr 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 echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
PHP 实现重载
2021/03/09 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
vue实现搜索功能
2019/05/28 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python实现分段线性插值
2018/12/17 Python
python如何统计代码运行的时长
2019/07/24 Python
Python笔试面试题小结
2019/09/07 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
最新pycharm安装教程
2020/11/18 Python
python如何调用php文件中的函数详解
2020/12/29 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
中学家长会邀请函
2014/01/17 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers