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动态加载变量示例分享
Feb 17 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
Python中单、双下划线的区别总结
Dec 01 Python
Python实现简单http服务器
Apr 12 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
使用python创建Excel工作簿及工作表过程图解
May 27 Python
Django DRF路由与扩展功能的实现
Jun 03 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实现查询手机归属地的方法详解
2017/04/28 PHP
JS 判断代码全收集
2009/04/28 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
python中stdout输出不缓存的设置方法
2014/05/29 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
jupyter安装小结
2016/03/13 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
python中二分查找法的实现方法
2020/12/06 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
担保贷款承诺书
2015/04/30 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle