漫画:“排序算法” 大总结

猴子排序代码 经典算法(猴子排序).cpp 立即下载

 

 

 

 

 

 

 

冒泡排序:

漫画:什么是冒泡排序?

 

选择排序:

漫画:什么是选择排序?

 

插入排序:

漫画:什么是插入排序?

 

此外还有冒泡排序的变种,鸡尾酒排序:

漫画:什么是鸡尾酒排序?

 

第三梯队的排序算法有什么共同点呢?它们的平均时间复杂度都是O(n^2)。

 

 

冒泡排序、选择排序、插入排序之间,究竟有什么样的差别呢?

 

首先从性能来分析,冒泡排序和插入排序的元素比较交换次数取决于原始数组的有序程度。

 

如果原始数组本来已经接近有序,只需要较少的比较交换次数即可完成排序。比如下面这个数组,只有7和8是逆序的:

 

 

如果原始数组大部分元素无序,则需要较多的比较交换次数。比如下面这个数组,绝大部分元素都是无序的:

 

 

在此基础上,插入排序的性能略高于冒泡排序。为什么这么说呢?因为冒泡排序每两个元素之间的交换是彼此独立的,比如A和B交换,B和C交换,C和D交换:

 

 

 

而插入排序的元素交换是连续的,比如把B赋值给A,把C赋值给B,把D赋值给C,最后把A赋值给D:

 

 

显然,归并排序的连续交换方式省去了许多无谓的交换操作。

 

再来说说选择排序,选择排序和前面两者不太一样,它的元素比较交换次数是固定的,和原始数组的有序程度无关。

 

因此,当原始数组接近有序时,插入排序性能最优;当原始数组大部分元素无序时,选择排序性能最优。

 

下面再说说排序的稳定性:

 

冒泡排序和插入排序是稳定排序,值相同的元素在排序后仍然保持原本的先后顺序。

 

选择排序是不稳定排序,值相同的元素在排序后不一定保持原本的先后顺序。

 

 

 

希尔排序:

漫画:什么是希尔排序?

 

快速排序:

漫画:什么是快速排序?

 

归并排序:

漫画:什么是归并排序?

 

堆排序:

漫画:什么是堆排序?

 

第二梯队的排序算法有什么共同点呢?它们的性能比第三梯队要高一个量级,其中希尔排序的平均时间复杂度最快可以达到O(n^1.3),快速排序、归并排序、堆排序的平均时间复杂度是O(nlogn)。

 

 

快速排序、归并排序、堆排序之间,究竟有什么样的差别呢?

 

还是先从性能来分析,虽然快速排序的平均时间复杂度是O(nlogn),但是在极端情况下,最坏时间复杂度是O(n^2)。

 

而归并排序和堆排序的时间复杂度稳定在O(nlogn)。

 

至于平均时间复杂度,虽然三者同样都是O(nlogn),但是堆排序比前两者的性能略低一些。为什么呢?主要是由于二叉堆的父子节点在内存中并不连续。

 

在访问内存数据时,对于顺序存储的数据,读写效率往往是最高的。根据CPU的空间局部性原理,CPU在每次访问数据的时候,会把内存中相邻的数据也一并存入缓存。这样一来,CPU以后再访问邻近的数据就不需要重新访问内存,而是访问CPU缓存,从而大大提升了程序执行的效率。

 

下图是有些夸张的示意:

 

 

 

在堆排序的过程中,常常需要父子节点之间进行比较和交换,而父子节点在数组中的位置并不是相邻,而是相差两倍左右:

 

 

反观快速排序和归并排序,无论是快速排序中把元素移动到pivot两侧,还是进行归并排序中的merge操作,都是按照数组元素的自然顺序依次进行比较和交换操作。

 

因此,堆排序的平均性能比快速排序和归并排序略低。

 

至于排序的稳定性,归并排序是稳定排序,快速排序和堆排序是不稳定排序。

 

此外,快速排序和堆排序是原地排序,不需要开辟额外空间。而归并排序是非原地排序,在merge操作的时候需要借助额外的辅助数组来完成。

 

 

计数排序:

漫画:什么是计数排序?

 

桶排序:

漫画:什么是桶排序?

 

基数排序:

漫画:什么是基数排序?

 

第一梯队的排序算法有什么共同点呢?它们的性能比第二梯队又要高出一个量级,都属于线性时间复杂度的排序算法。

 

虽然计数排序、桶排序、基数排序同为线性排序算法,但它们的时间复杂度有着很大不同:

 

计数排序的时间复杂度是O(n+m),其中m是原始数组的整数范围。

 

桶排序的时间复杂度是O(n),这是在分桶数量是n的前提下。

 

基数排序的时间复杂度是O(k(n+m)),其中k是元素的最大位数,m是每一位的取值范围。

 

至于排序的稳定性,这三种排序算法都属于稳定排序。

 

 

 

有哪些又出门又奇葩的排序算法呢?

 

睡眠排序

猴子排序

珠排序

 

漫画:三种 “奇葩” 的排序算法

 

这三种排序算法体现出了发明者天马行空的想象力,大家可以拿来娱乐一下,但是在现实工作中如有排序需求,可千万不要调用它们啊!

 

 

 

 

 

 

—————END—————

单细胞实战之数据净化三部曲:细胞周期校正、双胞体剔除与RNA污染清理——技术解析与实战指南 本文深入解析单细胞数据分析中至关重要的数据净化步骤,即细胞周期校正、双胞体剔除与RNA污染清理。通过实战代码演示与原理剖析,指导读者如何有效识别并去除技术噪音,从而获得更纯净、可靠的数据,为后续的细胞分群、差异表达等高级分析奠定坚实基础。 阅读详情

相关推荐

AFSim仿真系统—几何视角下的子系统交互机制解析

本文深入解析了AFSim仿真系统中子系统交互的几何机制。通过剖析世界坐标系、实体坐标系、部件坐标系等七层空间定位体系,阐述了传感器探测、目标指示等交互行为背后的几何原理与限制条件。掌握这套几何视角,是构建高保真、符合物理现实的AFSim仿真模型的关键,能有效避免坐标混乱、交互失效等常见问题。

terraform7cloud的博客 494

排序-猴子排序

无限猴子定理最早是由埃米尔·博雷尔在1909年出版的一本谈概率的书籍中提到的,此书中介绍了“打字的猴子”的概念。无限猴子定理是概率论中的柯尔莫哥洛夫的零一律的其中一个命题的例子。大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷时,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。 猴子排序是基于无限猴子定理形成的算法(x 流程 随机生成待排序列的一个排列,检测该排列是否是递增序列。 重复此过程,直至完成排序。 时间复杂度分析 平

Ice_teapoy的博客 2250

SAP MM自动化进阶:STO交货单自动创建的配置与优化

本文深入解析了SAP MM模块中实现公司间库存调拨订单(STO)交货单自动创建的完整配置流程与优化策略。通过激活自动交货与绑定发货点两大核心配置,打通自动化链路。重点探讨了如何集成ATP可用性检查以智能处理库存不足等异常场景,确保自动化流程的可靠性与业务贴合度,并提供了进阶监控与问题排查方法,助力企业显著提升供应链效率。

weixin_29206669的博客 124

1.1bogo排序

Bogo排序(Bogo-sort),又被称为猴子排序,是一种恶搞排序算法。 将元素随机打乱,然后检查其是否符合排列顺序,若否,则继续进行随机打乱,继续检查结果,直到符合排列顺序。 Bogo排序的最坏时间复杂度为O(∞),一辈子也不能输出排序结果,平均时间复杂度为O(n·n!)。 这让我想到了另一个理论:猴子理论,只要让一只猴子一直敲打计算机,理论上会有一天,它能敲出一本圣经出来,但是这个概率小到宇宙毁灭也很难敲出来。。 真的不知道这个排序应该叫做天才还是垃圾哈哈哈,但是闲的没事的我就把他实现出来了。

bai_Mou的博客 1292

西门子TM PosInput1模块SSI编码器配置与速度测量实战

本文详细介绍了西门子TM PosInput1模块配置SSI绝对值编码器的实战步骤,涵盖硬件组态、工艺对象配置、编程实现与速度测量优化。重点解析了高分辨率编码器的数值处理技巧和常见调试问题,帮助工程师快速实现高精度位置与速度检测,提升自动化项目效率。

emacs5lisp的博客 340

matlab中高频变压器怎么找,干货|手把手教你绕制高频变压器

原标题:干货|手把手教你绕制高频变压器绕制一个变压器所需材料:磁芯、骨架、各种铜线、麦拉胶带。变压器参数:磁芯:EE22原边:134T(1-3脚),辅助:32T(5-4脚),输出:15T(10-9脚)原边电感:1380±10%uH漏感:≤44uH引脚分布图: 特别注意:绕制方法为网上下载,其中变压器绕制方法是对的,但其中存在着很多问题(比如,正规变压器的绕组的头和尾是要添加铁氟龙套管的,每一层之间...

weixin_30895121的博客 2125

奇葩算法系列——量子猴子排序

之前我们介绍过猴子排序 https://blog.youkuaiyun.com/yshuoo/article/details/103831424 猴子排序的思想很简单,但是算法的时间复杂度太慢了,于是有人引入了当下最玄学的量子理论和当下很火的平行宇宙理论,我觉得其实就是空间换时间的思想。 对猴子排序做了升级,即量子猴排序。 如果猴子排序随机数列时,使用量子化随机排列,那么在我们观测这组数字前,他的...

yshuoo的博客 4162

PLDM入门(七):FRU Data Format

每个字段为TLV(Type-Length-Value)格式,具体类型、长度范围和值定义需参考。通过条件过滤(记录句柄、类型、字段类型等)分块获取FRU记录数据(可选功能)。整个FRU数据表由多个FRU记录数据块组成,每个数据块对应表2的结构(即包含。决定,每个字段按顺序排列(Type→Length→Value)通过分块传输方式写入FRU记录表数据(需终端支持写入操作)。(文档未提供表5内容,需结合标准文档完整版)。、字段数量、编码类型及具体字段的TLV数据)。无请求数据(空请求)。

weixin_44032634的博客 1762

无敌吊炸天!最“速”!最脑洞大开!排序算法之猴子排序和睡眠排序

失业的道路。

qq_64214481的博客 1752

MATLAB基础应用精讲-【数模应用】游程检验(附MATLAB、R语言和python代码实现)

游程检验是一种非参数性统计假设的检验方法,它是游程总数检验和最大游程检验的总称,用于两个独立样本的比较和观测结果随机性的检验测试。​游程检验亦称“连贯检验”,是根据样本标志表现排列所形成的游程的多少进行判断的检验方法。[2]例1:设某样本n=12人的标志表现为男、女,有以下三种排列。(i) 男\男,女\女\女,男,女\女,男\男\男\男;(ii) 男\男\男\男\男\男\男,女\女\女\女\女;(iii) 男,女,男,女,男,女,男,女,男,女,男\男;连续出现男或女的区段称为游程。

qq_36130719的博客 609

动态时间规整(Dynamic Time Warping,DTW):让时间序列分析不再枯燥和代码全分析

动态时间规整(DTW)是一种用于比较时间序列相似性的算法,特别适用于处理长度不同或时间轴不对齐的序列。本文介绍了DTW的核心概念,包括其通过非线性对齐解决时间扭曲问题的能力,以及在语音识别、金融分析等领域的应用。通过Python代码示例,演示了如何计算两个模拟时间序列的DTW距离,并可视化最优对齐路径。结果显示,DTW能够有效捕捉序列间的相似模式,即使它们在时间轴上存在偏移或伸缩。该算法通过最小化累积距离来评估相似性,得分越低表明序列间相似度越高。

此星光明博客 162

猴子排序算法

该定理内容大致为:给一只猴子一台打印机,虽然这只猴子根本不识字,但会乱按,经过一段时间后,在它乱按出来的单词里总能找到一些至少看起来是有意义的部分,比如一两个简短的单词,由此可以推出:只要给它足够长的时间,猴子甚至能完整地写出一本莎士比亚全集。千百年来,衔尾蛇被赋予了数不清的意义,其中就包括较易理解的“循环”,“无限”,以及偏向神学概念的“生死循环”与“轮回”,还有现代科学意义上的“熵增”,甚至惊天动地的“宇宙真理”。猴子算法的意义更多的是理论上的而非应用上,它打破了排序算法时间复杂度的极限,在。

qq_41757528的博客 4915

win7 vs2012+wdk8.0 搭建wdf驱动开发环境

开发环境搭建: 系统:win7 x64 工具:vs2012 + WDK8.0 插件:wdfcoinstaller.msi (1)先安装vs2012,再安装wdk8.0,这样在打开vs2012时可以创建windows drivers类型的工程。 注:vs2012不能安装wdk8.1,wdk8.1必须安装在vs2013上 下载链接:http://msdn.microsoft.com/zh-cn/win...

技术联盟 5343

【算法入门漫画】:“排序算法” 大总结

冒泡排序:漫画:什么是冒泡排序?选择排序:漫画:什么是选择排序?插入排序:漫画:什么是插入排序?此外还有冒泡排序的变种,鸡尾酒排序:漫画:什么是鸡尾酒排序?第三梯队的排序算法有什么共同点...

fengdu78的博客 285

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c++ 二维数组 排序_漫画:“排序算法” 大总结

​冒泡排序:漫画:什么是冒泡排序?​mp.weixin.qq.com选择排序:漫画:什么是选择排序?​mp.weixin.qq.com插入排序:漫画:什么是插入排序?​mp.weixin.qq.com此外还有冒泡排序的变种,鸡尾酒排序:漫画:什么是鸡尾酒排序?(修订版)​mp.weixin.qq.com第三梯队的排序算法有什么共同点呢?它们的平均时间复杂度都是O(n^2)。冒泡排序、选择排序、插入...

weixin_39637285的博客 227

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

归并排序 c++_漫画:“排序算法” 大总结

​冒泡排序:漫画:什么是冒泡排序?​mp.weixin.qq.com选择排序:漫画:什么是选择排序?​mp.weixin.qq.com插入排序:漫画:什么是插入排序?​mp.weixin.qq.com此外还有冒泡排序的变种,鸡尾酒排序:漫画:什么是鸡尾酒排序?(修订版)​mp.weixin.qq.com第三梯队的排序算法有什么共同点呢?它们的平均时间复杂度都是O(n^2)。冒泡排序、选择排序、插入...

weixin_39761422的博客 130

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

漫画:三种 “奇葩” 的排序算法

在算法的世界里,有许多高效率的排序算法,比如快速排序、归并排序、桶排序......它们大大提高了程序的性能。但是,也有一些比较奇葩的排序算法,它们既不能做到高效率,也没有很好的可读性。那...

程序员小灰的博客 3914

漫画章节智能排序算法:Kavita如何实现完美阅读体验

Kavita作为一个功能丰富的跨平台阅读服务器,其**漫画章节排序算法**是其核心竞争力的关键。这个智能排序系统能够自动整理混乱的章节编号,为用户提供流畅自然的阅读体验。💫 ## 🔍 排序算法的技术实现 Kavita的章节排序主要依赖于专门的比较器实现。系统包含多个关键组件: - **ChapterSortComparer** - 专门用于在单个卷内对章节进行阅读顺序排序的特殊比较器 -

gitblog_00918的博客 1088

漫画:反直觉的 “三门问题”

————— 第二天 ————— ———————————— 如何进行分析呢?我们不妨回到问题的起点,也就是参与者即将进行初次选择,主持人还没有打开一扇空门的时候。 从上图可以看出,我们总共面临着6种不同...

程序人生的博客 973
上一篇: 漫画:什么是快速排序?
下一篇: 漫画:什么是红黑树?
废言Pro
博客等级 码龄16年 1093粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值