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

0、前言

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

时间复杂度

空间复杂度

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

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

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

自上而下的递归

自下而上的迭代

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

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

2、算法过程图解

0meduilf1fv.gif

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)内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: python基本算法之实现归并排序(Merge sort)

本文地址: http://www.cppcns.com/jiaoben/python/340861.html

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

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

相关文章

从前端智能化看“低代码/无代码”

简介&#xff1a; 什么是低代码/无代码开发&#xff1f;业界对于低代码/无代码开发是否存在其他不同的理解&#xff1f;低代码开发和无代码开发之间的区别是什么&#xff1f; 作者 | 甄子 来源 | 阿里技术公众号 一 概念 1 什么是低代码/无代码开发&#xff1f;业界对于低代码…

SAP 导出 HTML,【我sap这导出数据表格export.mhtml怎么转换为 excel 工作表.xlsx】excel生成html表格数据...

如何把Html网页格式转成Excel表格1、单击数据--导部数据--新建Web查询。2、勾选我可以此内容&#xff0c;允许播放&#xff0c;单击继续按钮。3、在地址栏输入网站地址&#xff0c;转到此网站里面。4、跳转到指定网页&#xff0c;点击箭头按钮&#xff0c;然后导入数据到Excel。…

初二物理模型有哪些_暑假新初二、新初三的数学该怎么学,教辅怎么买,题该怎么刷?看这里~...

这个暑假对于新初二和新初三的孩子都非常关键&#xff0c;因为下一学期的数学难度都要上升一个台阶&#xff0c;自古相传一句老话“初二两极分化&#xff0c;初三天上地下”&#xff0c;其实引起这么大化学反应的原因就是在于数学和科学这两门理科在八上和九上有了一个质变。我…

低代码会让程序员更加内卷吗?

作者| Mr.K 编辑| Emma来源| 技术领导力(ID&#xff1a;jishulingdaoli)今天的主题呢主要是来源于最近的一个很火的话题——『低代码』。低代码会不会让程序员更加内卷&#xff1f;要回答这个问题&#xff0c;需要先弄清楚&#xff1a;低代码适合做什么&#xff0c;不适合做什…

技术干货 | 应用上线前的“体检”,你知道需要检测哪些指标吗?

简介&#xff1a; 应用上线前检测哪些项目&#xff1f;如何检测&#xff1f;检测数据指标包括哪些&#xff1f; 随着越来越多的企业基于 mPaaS 搭建并上线新的 App&#xff0c;App 的上线质量也成为各个客户关注的重点。上线前检测哪些项目&#xff1f;如何检测&#xff1f;检…

python 机器学习_基于 Python 语言的机器学习工具Sklearn

本篇介绍了Sklearn机器学习基础&#xff0c;从Sklearn的简介&#xff0c;模块以及与tensorflow的优劣势对比来了解基于Python语言的机器学习工具。01、Sklearn简介sklearn(scikit-learn)是Python重要的学习库&#xff0c;它封装了机器学习中常用的算法&#xff0c;包括监督学习…

那些你不知道的TCP冷门知识!

简介&#xff1a; 最近在做数据库相关的事情&#xff0c;碰到了很多TCP相关的问题&#xff0c;新的场景新的挑战&#xff0c;有很多之前并没有掌握透彻的点&#xff0c;大大开了一把眼界&#xff0c;选了几个案例分享一下。 最近在做数据库相关的事情&#xff0c;碰到了很多TC…

西门子触摸屏和计算机网络,西门子触摸屏与计算机连接不上

1.1 1代精彩面板仅支持使用PPI电缆(RS232-PPI和USB-PPI)下载程序&#xff0c;操作步骤如下&#xff1a;使用PPI下载方式&#xff0c;组态电脑需要使用RS232/PPI电缆或USB/PPI电缆与面板相连。订货号分别如下&#xff1a;RS232/PPI电缆&#xff1a;6ES7901-3CB30-0XA0USB/PPI电缆…

CPU 可以跑多快?地球到火星的距离告诉你!

来源&#xff1a;码农的荒岛求生作者&#xff1a;码农的荒岛求生这张出自Google大神 Jeff Dean的图&#xff0c;展示系统中各种关键操作的时延具体有多少。需要注意的是这张图上的数据自2012年后就没有再更新过了&#xff0c;统计自2020年的最新数据见这里&#xff1a;这张图中…

步进电机五根线怎么接_步进驱动和伺服驱动的区别

概述步进电机主要是依相数来做分类&#xff0c;而其中又以二相、五相步进电机为目前市场上所广泛采用。二相步进电机每转最细可分割为400等分&#xff0c;五相则可分割为1000等分&#xff0c;所以表现出来的特性以五相步进电机较佳、加减速时间较短、动态惯性较低。随着全数字式…

可观测告警运维系统调研——SLS告警与多款方案对比

简介&#xff1a; 本文介绍对比多款告警监控运维平台方案&#xff0c;覆盖阿里云SLS、Azure、AWS、自建系统&#xff08;ELK、Prometheus、TICK&#xff09;等方案。 前言 本篇是SLS新版告警系列宣传与培训的第三篇&#xff0c;后续我们会推出20系列直播与实战培训视频&#…

HTML和css学术报告,清华大学 张超 副教授访问我院并做学术报告

应凌振老师邀请&#xff0c;清华大学张超老师于7月9日(周五)下午2:30在计算机楼三楼313会议室来我院做学术报告&#xff0c;具体情况如下。报告题目:智能漏洞攻防技术报告时间&#xff1a;7月9日(周五)下午2:30报告地点&#xff1a;九龙湖校区计算机楼三楼313会议室报告摘要&am…

Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据

简介&#xff1a; 服务网格ASM的Mixerless Telemetry技术&#xff0c;为业务容器提供了无侵入式的遥测数据。遥测数据一方面作为监控指标被ARMPS/prometheus采集&#xff0c;用于服务网格可观测性&#xff1b;另一方面被HPA和flaggers使用&#xff0c;成为应用级扩缩容和渐进式…

有乳胶枕吗_小耳朵猪、黑木耳面条、乳胶枕……吃喝玩乐穿用样样都有!松江这个展销会,你去了吗?...

小耳朵猪、黑木耳面条……在松江新理想商业广场的这个展销会上&#xff0c;这些松江尝不到的特色农产品吸引眼球。2020年松江对口帮扶西双版纳特色农产品展销会今天开幕。为期5天的展销会里&#xff0c;特色农产品、旅游景点、橡胶制品、民族服饰等西双版纳特色商品集中展销&am…

Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 2 应用级扩缩容

简介&#xff1a; 应用级扩缩容是相对于运维级而言的。像监控CPU/内存的利用率就属于应用无关的纯运维指标&#xff0c;针对这种指标进行扩缩容的HPA配置就是运维级扩缩容。而像请求数量、请求延迟、P99分布等指标就属于应用相关的&#xff0c;或者叫业务感知的监控指标。 本篇…

管理系统中计算机应用 重点章节,11年《管理系统中计算机应用》 第5章 重点要点.doc...

第五章系统分析系统分析的主要目的是对现行系统进行详细调查&#xff0c;以充分掌握现行系统全面和真实的情况&#xff0c;分析用户信息需求&#xff0c;在此基础上提出新系统的逻辑模型。系统分析阶段的主要活动有&#xff1a;现行系统的详细调查、用户需求分析和新系统逻辑模…

自动替换 Kubernetes 镜像

来源&#xff1a;云原生指北作者&#xff1a;Addo Zhang最近萌生了个想法&#xff0c;维护一个后网络友好的仓库镜像&#xff0c;在 Pod 创建时将镜像仓库切换到自维护的仓库&#xff0c;从自维护的仓库拉取镜像。前几天体验了极狐Gitlab 的容器镜像库&#xff0c;便是为这个想…

Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布

简介&#xff1a; 作为CNCF[成员](https://landscape.cncf.io/card-mode?categorycontinuous-integration-delivery&groupingcategory&selectedweave-flagger)&#xff0c;[Weave Flagger](flagger.app)提供了持续集成和持续交付的各项能力。Flagger将渐进式发布总结为…

react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...

如图&#xff1a;项目中百度地图的应用添加起始点、终点并绘制路线在展示代码的时候首先展示一下后台返回给我的接口{其中position_list参数代表的是用户的行驶点&#xff0c; area参数代表的是服务区的坐标点&#xff0c;下面会用到参数下面开始展示代码了index.html引入百度地…

基线长度中误差的计算_电子战支援实施中的测向技术

派遣一个机载电子战机组执行支援压制敌防空系统任务&#xff0c;在任务计划阶段&#xff0c;全体人员将会获取任务区域内的EOB&#xff0c;机载电子战人员会优先识别他们在任务期间可能会遇到的威胁辐射源&#xff0c;以及其他中立、友好辐射源。当机载电子战人员进入目标作战区…