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中break语句的用法
May 14 Python
简述Python中的进程、线程、协程
Mar 18 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
基于Django与ajax之间的json传输方法
May 29 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
详解Scrapy Redis入门实战
Nov 18 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python实现的中国剩余定理算法示例
2017/08/05 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
会计学个人自荐信模板
2013/12/13 职场文书
合伙协议书
2014/04/23 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang