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标准库之随机数 (math包、random包)介绍
Nov 25 Python
详解python 发送邮件实例代码
Dec 22 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
python表格存取的方法
Mar 07 Python
基于Django与ajax之间的json传输方法
May 29 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
wxpython布局的实现方法
Nov 01 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
python标准库ElementTree处理xml
May 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
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
matplotlib实现区域颜色填充
2019/03/18 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
python中图像通道分离与合并实例
2020/01/17 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
服装采购员岗位职责
2014/03/15 职场文书
聘用意向书范本
2014/04/01 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
琅琊山导游词
2015/02/05 职场文书
项目验收申请报告
2015/05/15 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
Python中的pprint模块
2021/11/27 Python