python实现归并排序算法


Posted in Python onNovember 22, 2018

归并排序是典型的分治法的应用

思想:先递归分解数组,再合并数组

原理:将数组分解最小之后,然后合并两个有序数组,基本思想是比较两个数组的最前面的数,谁小就取谁,取完后,将相应的指针后移以为。然后再比较,直到一个数组为空,最后把另一个数组的剩余部分复制过来即可。

Python代码实现:

#归并排序
 
def merge_sort(alist):
 if len(alist) <= 1:
  return alist
 # 二分分解
 num = len(alist) / 2
 left = merge_sort(alist[:num])
 right = merge_sort(alist[num:])
 # 合并
 return merge(left, right)
 
 
def merge(left, right):
 '''合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组'''
 # left与right的下标指针
 l, r = 0, 0
 result = []
 while l < len(left) and r < len(right):
  if left[l] < right[r]:
   result.append(left[l])
   l += 1
  else:
   result.append(right[r])
   r += 1
 result += left[l:]
 result += right[r:]
 return result
 
 
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
sorted_alist = merge_sort(alist)
print(sorted_alist)

时间复杂度:

最优时间复杂度:O(nlongn)

最坏时间复杂度 :O(nlongn)

稳定性:稳定

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
python进阶教程之函数参数的多种传递方法
Aug 30 Python
python输出指定月份日历的方法
Apr 23 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
详解python中list的使用
Mar 15 Python
Python初学者常见错误详解
Jul 02 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
python argparser的具体使用
Nov 10 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
Python的iOS自动化打包实例代码
Nov 22 #Python
详解如何用django实现redirect的几种方法总结
Nov 22 #Python
PyGame贪吃蛇的实现代码示例
Nov 21 #Python
python+flask实现API的方法
Nov 21 #Python
python实现事件驱动
Nov 21 #Python
python事件驱动event实现详解
Nov 21 #Python
python程序封装为win32服务的方法
Mar 07 #Python
You might like
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php实现mysql封装类示例
2014/05/07 PHP
PHP代码优化技巧小结
2015/09/29 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
javascript截取字符串小结
2015/04/28 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
Vue自定义指令详解
2017/07/28 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
基于iview的router常用控制方式
2019/05/30 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
资深财务管理人员自我评价
2013/09/22 职场文书
公司年会主持词
2014/03/22 职场文书
学校节能减排倡议书
2014/05/16 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
客房服务员岗位职责
2015/02/09 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
红色影片观后感
2015/06/18 职场文书
安全教育的主题班会
2015/08/13 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers