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 12 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
python中list列表的高级函数
May 17 Python
python 全文检索引擎详解
Apr 25 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
Flask框架配置与调试操作示例
Jul 23 Python
Python中fnmatch模块的使用详情
Nov 30 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
python中四舍五入的正确打开方式
Jan 18 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采用session实现防止页面重复刷新
2015/12/24 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
python 判断是否为正小数和正整数的实例
2017/07/23 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
资产经营总监岗位职责范文
2013/12/01 职场文书
大学考试作弊检讨书
2014/01/30 职场文书
感恩节红领巾广播稿
2014/02/11 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
给市场的环保建议书
2014/05/14 职场文书
公司授权委托书样本
2014/09/15 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
MySQL添加索引特点及优化问题
2022/07/23 MySQL