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 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
Random 在 Python 中的使用方法
Aug 09 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
python画微信表情符的实例代码
Oct 09 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
Python列表的索引与切片
Apr 07 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提示Failed to write session data错误的解决方法
2014/12/17 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
金士达面试非笔试
2012/03/14 面试题
过滤器的用法
2013/10/08 面试题
2014年大学生就业规划书
2014/04/04 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
九一八事变演讲稿
2014/09/05 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
2015个人半年总结范文
2015/03/09 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书