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;业界对于低代码…

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

这个暑假对于新初二和新初三的孩子都非常关键&#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…

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系列直播与实战培训视频&#…

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

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

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

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

自动替换 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;以及其他中立、友好辐射源。当机载电子战人员进入目标作战区…

洞察设计模式的底层逻辑

简介&#xff1a; 设计模式是开发同学经常聊到的话题&#xff0c;也经常被用到实际的开发项目中&#xff0c;熟练的人可以做到信手拈来&#xff0c;不熟悉的人陷入苦思冥想中。笔者认为&#xff0c;不仅仅要掌握设计模式的用法&#xff0c;更要洞察设计模式的底层逻辑&#xff…

pta段错误是什么意思_用Python执行Django数据迁移时报!(1091错误及解决方法)...

前言&#xff1a;今天为大家带来的内容是用Python执行Django数据迁移时报!(1091错误及解决方法)本文内容具有不错的参考意义&#xff0c;希望在此能够帮助到大家&#xff01;前几天在Pycharm 中的Terminal下&#xff0c;执行数据迁移操作时&#xff1a;第一步&#xff1a; Pyth…

cad大理石填充图案_CAD制图初学入门者必须知道的CAD填充问题

在使用浩辰CAD软件绘制图纸的过程中&#xff0c;经常会用到CAD填充功能。但是CAD制图初学入门者在进行CAD填充时偶尔会遇到一些问题&#xff0c;比如在自己的CAD软件中填充是完整的&#xff0c;但是在别人的CAD软件中打开却出现了缺口&#xff0c;这是什么原因呢&#xff1f;接…

苹果:iOS 比 Android 更安全!

整理 | 祝涛 出品 | CSDN据报道&#xff0c;在答复欧盟委员会数字市场行动的函件中&#xff0c;苹果援引诺基亚2019年、2020年的威胁情况报告称&#xff0c;安卓平台恶意软件的数量是iPhone的15~47倍。苹果称iOS比安卓安全就在于无法绕过商店安装软件&#xff0c;因此坚决…

日志服务SLS 助力识货 APP,解决业务数据采集查询监控问题

简介&#xff1a; 日志服务SLS 助力识货 APP&#xff0c;解决业务数据采集查询监控问题 更多存储标杆案例 欢迎点击下方链接查看 阿里云存储标杆案例样板间 公司介绍 识货APP是虎扑体育旗下的导购应用&#xff0c;致力于为广大年轻用户提供专业的网购决策指导&#xff0c;为…