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函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python中Collections模块的Counter容器类使用教程
May 31 Python
Django验证码的生成与使用示例
May 20 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
Python简易版图书管理系统
Aug 12 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
Python使用Excel将数据写入多个sheet
May 16 Python
python 6行代码制作月历生成器
Sep 18 Python
如何在windows下安装配置python工具Ulipad
Oct 27 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
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
js控制frameSet示例
2013/09/10 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
axios学习教程全攻略
2017/03/26 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
Python实现partial改变方法默认参数
2014/08/18 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
python 决策树算法的实现
2020/10/09 Python
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
销售文员的岗位职责
2013/11/20 职场文书
学生干部的自我评价分享
2014/01/18 职场文书
语文教研活动总结
2014/07/02 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
2014年营销工作总结
2014/11/22 职场文书
第二次离婚起诉书
2015/05/18 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技