python 归并排序算法_python基本算法之实现归并排序(Merge sort)

0、前言

评判一个算法的好坏的标准:

时间复杂度

空间复杂度

1、归并排序算法是什么?

冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neumann于1945年发明。采用分治法(Divide and Conquer)的经典应用!!将规模较大的排序问题化归到较小的规模上解决。

基本实现包含下面的两种方法:

自上而下的递归

自下而上的迭代

将已经有的有序子序列合并,得到完全有序的子序列。就是先得到每个子序列有序,然后在使得两个子序列合并成为一个有序的。如果是把两个有序表合并成为一个有序表,成为二路归并。

归并排序的性能不受到输入数据的影响,这一个和选择排序是一样的,但是性能比选择排序要好,性能始终是O(n log n)。但是性能的优越必定是额外的内存空间作为巨大代价的!

2、算法过程图解

3、代码实现

代码如下(示例01):

"""

Merge_Sort 归并排序

分治算法Divide and Conquer

时间复杂度:

"""

# 切割数组 的函数

def merge_sort(alist):

# 如果长度小于等于1 ,不能再分割了

if len(alist) <= 1:

return alist

# 根据列表长度确定拆分的中间位置

mid_index = len(alist)//2

# 使用切片实现对列表的切分

# left_list = alist[:mid_index]

# right_list = alist[mid_index:]

# 递归调用,无限切割下去

left_list = merge_sort(alist[:mid_index])

right_list = merge_sort(alist[mid_index:])

return merge(left_list, right_list)

# 排序的函数

def merge(left_list, right_list):

l_index,r_index = 0,0

merge_list = []

# 判断列表里面是否还有元素可以用

while l_index < len(left_list) and r_index < len(right_list):

# 哪边的元素小于另外一边的的元素就把哪边的元素加入进去,对应的索引加一

if left_list[l_index] < right_list[r_index]:

merge_list.append(left_list[l_index])

l_index += 1

else:

merge_list.append(right_list[r_index])

r_index += 1

# 下面的这两个就是,如果有一个列表全部添加了,另外一个列表直接添加到merge_list里面了

merge_list += left_list[l_index:]

merge_list += right_list[r_index:]

return merge_list

if __name__ == '__main__':

alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]

print(f'原列表的顺序:{alist}')

alist = merge_sort(alist)

print(f'选择排序之后的列表的顺序:{alist}')

里面的左右列表都是被划分到了只有一个元素的是去比较和添加的。大家可以把代码放置到编译器里面,debug运行,看一哈具体的过程,结合动态图片演示理解更好!

4、评判算法

最好时间复杂度:O(n log n)

最坏时间复杂度:O(n log n)

平均时间复杂度:O(n log n)

空间复杂度:O(n)

算法稳定性:稳定的排序

总结

到此这篇关于python基本算法之实现归并排序(Merge sort)的文章就介绍到这了,更多相关python归并排序(Merge sort)内容请搜索随便开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持随便开发网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel在线_功能强大的纯前端 Excel 在线表格: Luckysheet

【导语】&#xff1a;Luckysheet是一款类似excel的在线表格&#xff0c;纯前端&#xff0c;功能强大、配置简单、完全开源&#xff0c;几行代码就能展现出一个功能完备的在线表格。简介Luckysheet是一款类似excel的纯前端在线表格&#xff0c;只需要引入js和css文件即可使用。L…

STL-queue.back()队尾误区

queue.back()指向最新插入queue中的值&#xff0c;而非队尾元素&#xff0c; 如&#xff1a;queue.pop()多次&#xff0c;并不会影响queue.back()的值。 STL 英文back()解释&#xff1a; reference& back(); const_reference& back() const; Access last element …

u8 和 char如何转化_EXCEL小知识——如何快速实现文本与数值的互相转化

我是前言嗨&#xff0c;大家好&#xff0c;消失了一个多月&#xff0c;我胡汉三&#xff0c;又回来啦~今天给大家带来的&#xff0c;是如何实现文本与数值之间的 “ 快速 ” 转换&#xff01;众所周知&#xff0c;在一些制造类公司&#xff0c;公司的运营离不开一些系统软件的辅…

navicat er图没有连线_迁徙图?流向图?城市关系强度图?

文章首发于公众号「码上GIS」&#xff0c;欢迎关注。文中流向图和城市关系强度图的 ArcMap 10.5 Mxd 工程和数据可在公众号后台回复「190708」和「190709」获取不记得是从哪年开始&#xff0c;每年春运期间&#xff0c;百度都会发布个春运大数据&#xff0c;其中最让人印象深刻…

卷积层和池化层的计算公式的区别

n为图像宽/高 f为卷积核宽/高 p为填充长度 stride为步长 卷积层后输出图像的大小&#xff1a;&#xff08;n-f2p)/stride 向下取整 池化层后输出图像的大小&#xff1a;&#xff08;n-f2p)/stride 向上取整 4.5 向下取整&#xff1a;4 向上取整&#xff1a;5 参考自&am…

python微信聊天机器人源码_8.【代码】微信聊天机器人(API的应用) - Python网络爬虫实战...

本文档仅作为视频学习过程中的参考不可用于非法途径编程目的&#xff1a;编写微信机器人时间&#xff1a;2018-2-25作者&#xff1a;刘宇V:1.0import urllib.requestimport urllib.parseimport jsonimport itchat# 自动聊天def autoChat(input_data,userid):api_url "htt…

linux删除文件_Linux中删除特殊名称文件的多种方式

今日分享&#xff1a;我们在肉体的疾病方面花了不少钱&#xff0c;精神的病害方面却没有花什么&#xff0c;现在已经到了时候&#xff0c;我们应该有不平凡的学校。--《瓦尔登湖》前言我们都知道&#xff0c;在linux删除一个文件可以使用rm命令&#xff0c;但是有一些特殊名称的…

Python中的lambda和apply结合使用

1、 lambda lambda原型为&#xff1a;lambda 参数:操作(参数) lambda函数也叫匿名函数&#xff0c;即没有具体名称的函数&#xff0c;它允许快速定义单行函数&#xff0c;可以用在任何需要函数的地方。这区别于def定义的函数。 lambda与def的区别&#xff1a; 1&#xff09;…

软件开发报价模板_定制开发小程序和行业通用(模板)小程序的利弊分析

最近很多掌客多客户来咨询&#xff0c;纠结到底是定制开发小程序还是买个模板通用小程序好&#xff0c;其实在回答这个问题之前&#xff0c;我们先要搞明白什么是定制开发小程序&#xff0c;什么是模板通用小程序&#xff0c;最后再问问自己的搞小程序的目的是什么&#xff1f;…

BatchNorm中forward未被调用原因

1.nn.Module类理解 pytorch里面一切自定义操作基本上都是继承nn.Module类来实现的 方法预览&#xff1a; class Module(object):def __init__(self):def forward(self, *input):def add_module(self, name, module):def cuda(self, deviceNone):def cpu(self):def __call__(…

git上传分支的原理_GIT分支,创建分支与合并分支的工作原理与教程

开发一个版本&#xff0c;采用的发布流程&#xff1a;(1).从master的最新代码拉取一个开发分支&#xff0c;在上面进行开发(2).在开发分支上不断地进行提交版本&#xff0c;期间&#xff0c;master也会有因为其他版本上线而不停有版本合并(3).要发布的时候&#xff0c;把分支重…

有十五个数按由大到小顺序存放在一个数组中_「图形化编程」前导知识-数组(一)...

今天我们来学习一个新的概念-数组。这节课将通过一个小程序讲解数组的基本概念-数组的长度和下标定义数组指的是有序元素的集合&#xff0c;数组中的每个元素具有相同的类型&#xff0c;按照顺序排列的形式组织在一起。我们可以把数组想象为一个抽屉柜&#xff0c;每个抽屉只能…

octave错误-error: ‘squareThisNumber‘ undefined near line 1 column 1

.m文件名称也应为大写&#xff1a;squareThisNumber.m 问题2&#xff1a; parse error near line 1 of file C:\Users\asus\squareThisNumber.m syntax error >>> {\rtf1\ansi\ansicpg936\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset134 \cb\ce\cc\e5;}} 解决方案…

工业机器人几个自由度_工业机器人有多少个运动自由度呢?

2008-09-11psp有什么好游戏?自由度很高的自由的高的游戏&#xff0c;如果不限定位动作游戏的话还是有一些的。首先就是楼主所说的GTA&#xff0c;自由度高的典范。然后楼上MM说的《怪物猎人》&#xff0c;同样超高自由度的动作游戏&#xff0c;推荐。《魔界战记》&#xff0c;…

python矩阵中找满足条件的元素_Python 找到列表中满足某些条件的元素方法

Python 找到列表中满足某些条件的元素方法 更新时间&#xff1a;2018年06月26日 11:20:17 作者&#xff1a;CS_network 今天小编就为大家分享一篇Python 找到列表中满足某些条件的元素方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看…

计算机启动过程-阮一峰

从打开电源到开始操作&#xff0c;计算机的启动是一个非常复杂的过程。 我一直搞不清楚&#xff0c;这个过程到底是怎么回事&#xff0c;只看见屏幕快速滚动各种提示...... 这几天&#xff0c;我查了一些资料&#xff0c;试图搞懂它。下面就是我整理的笔记。 零、boot的含义 …

python全局名称空间_python名称空间,命名空间

全局名称空间&#xff1a;在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内存, 表示这个函数存在了, 至于函数内部的变量和逻辑, 解释器是不关心的. 也…

10分钟带你了解python_ComeOn!10分钟带你了解Python的变量和数据类型

对任何语言来说&#xff0c;变量和数据类型都是非常重要和基础的内容。这篇文章就带你用10分钟的时间&#xff0c;学会Python的变量和数据类型这个知识点。一、知识点python 关键字变量的定义与赋值input() 函数字符串的格式化二、实验步骤每一种编程语言都有它们自己的语法规则…

python神经网络实例_Python编程实现的简单神经网络算法示例

本文实例讲述了Python编程实现的简单神经网络算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; python实现二层神经网络 包括输入层和输出层 # -*- coding:utf-8 -*- #! python2 import numpy as np #sigmoid function def nonlin(x, deriv False): if(deriv Tru…

由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

问题描述&#xff1a; 由于被认为是客户端对错误&#xff08;例如&#xff1a;畸形的请求语法、无效的请求信息帧或者虚拟的请求路由&#xff09;&#xff0c;服务器无法或不会处理当前请求。 在实现向数据库中添加记录时&#xff0c;请求发送无效&#xff0c;参数也未传递到控…