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实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
python爬取微信公众号文章
Aug 31 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
python中pygame安装过程(超级详细)
Aug 04 Python
Python实现把类当做字典来访问
Dec 16 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
python实现文件分片上传的接口自动化
Nov 19 Python
python实现不同数据库间数据同步功能
Feb 25 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抽象类基本用法示例
2018/12/28 PHP
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
python安装pywin32clipboard的操作方法
2019/01/24 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
助人为乐表扬信范文
2014/01/14 职场文书
工程招投标邀请书
2014/01/30 职场文书
股权转让协议书
2014/04/12 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers