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

猴子排序代码 经典算法(猴子排序).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—————

Vue2 - 详细实现解析Markdown内容生成侧边栏Toc目录索引,识别文章内容根据大标题/小标题自动生成多级文章目录,点击目录导航时跳转到文章内容对应的锚点位置带过渡动画,滑过锚点时高亮对应标题 vue2,nuxt2,Markdown,目录,文章目录锚点,滚动高亮导航文字,根据页面滚动高亮显示目录的侧边栏,自动提取标题生成右侧目录,vuemarkdown解析并生成目录,滚动页面的时候文章目录跟着选中效果,侧边栏滚动跟随页面,右边目录固定,左边内容可以滚动并且与左边目录联动,实现监听滚动,锚点定位,文章目录滚动跟随高亮,右边菜单点击目录滚动到对应标题,报错,渲染失败,文章内容,读取#标题符号,自动生成一个目录树,自动生成Toc目录,博客内容生成目录索引,资讯文章,生成锚点目录树TOC,详细示例代码教 阅读详情

相关推荐

Claude Code 使用 OpenAI Codex(GPT-5.3-Codex)完整配置教程

通过 LiteLLM 可以让 Claude Code 调用任何模型,包括:OpenAIDeepSeekGemini本地模型↓↓优点:不依赖 Anthropic API可自由切换模型支持统一 AI Gateway这种“LLM Gateway 架构”正在成为 AI 开发工具的主流实践。

Jacobe_zhao的博客 1万+

排序-猴子排序

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

Ice_teapoy的博客 2250

基于的公司考勤系统(程序+开题报告)(开题报告+源码)

我们将研究和设计系统的架构和功能模块,包括员工信息管理模块、部门信息管理模块、考勤信息记录模块、工资信息计算模块、请假信息处理模块、奖惩信息管理模块、公告信息发布模块、上班打卡模块以及加班申请模块等。目的: 本项目旨在设计并实现一个基于的公司考勤系统,通过该系统,可以实现对员工、部门信息、考勤信息、工资信息、请假信息、奖惩信息、公告信息、上班打卡、加班申请等功能的统一管理。基于的公司考勤系统的设计与实现,旨在通过自动化技术提高考勤管理的效率和准确性,为企业管理提供有力的数据支持。最终成品以下面运行环境。

迟限程序设计 997

1.1bogo排序

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

bai_Mou的博客 1292

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 410

利用腾讯云轻量服务器快速搭建网站CDN

腾讯云的轻量最近在主机和站长中间可谓是占尽来风头,优秀的线路,低廉的价格使得越来越多的人开始使用腾讯云的轻量级服务器来部署应用。由于腾讯云轻量服务器的海外服务器电信走的是CN2GIA线路带宽30m挺适合做CDN的,我就记录一下如何利用腾讯云香港的轻量服务器搭建一个CDN。 购买服务器 首先选购服务器,最近腾讯云在做活动,力度很大国内备案用户可以选用国内的服务器最低128元/年,未备案的可以选用香港或者新加坡的服务器。 购买链接 服务器系统选Debian、Ubuntu、centos都可以 一键脚

demo_top的博客 2565

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

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

yshuoo的博客 4162

Ubuntu 20.04下大陆ARS408毫米波雷达点云数据采集与RVIZ实时可视化全流程解析

本文详细解析了在Ubuntu 20.04系统下,如何实现大陆ARS408毫米波雷达的点云数据采集与RVIZ实时可视化全流程。内容涵盖硬件连接、ROS Noetic环境搭建、CAN接口配置、数据验证及自动化脚本编写,为机器人感知、自动驾驶等领域的开发者提供了一套稳定、实用的实战方案。

bash7scripter的博客 699

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

失业的道路。

qq_64214481的博客 1752

YOLOv8改进 | Conv篇 | 利用YOLOv9的GELAN模块替换C2f结构(附轻量化版本 + 高效涨点版本 + 结构图)

本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的GELAN模块来改进YOLOv8中的C2f,GELAN融合了CSPNet和ELAN机制同时其中利用到了RepConv在获取更多有效特征的同时在推理时专用单分支结构从而不影响推理速度,同时本文的内容提供了两种版本一种是参数量更低涨点效果略微弱一些的版本(参数量V8n下降80w,计算量为6.1GFLOPs),另一种是参数量稍多一些但是效果要不参数量低的效果要好一些(均为我个人整理),提供两种版本是为了适配不同需求的读者,具体选择

Snu77的博客 7567

AI漫剧全套万能提示词合集

今天给大家整理一套已经跑通爆款漫剧的万能提示词库!覆盖:豆包剧本人设词 + 分镜生成词 + 即梦绘图词 + 动态优化词 + 防翻车固定词直接复制粘贴,新手也能做出稳定、高清、统一、有质感的AI漫剧!你是资深短视频漫剧编剧,擅长制作60秒竖屏爆款AI漫剧,请为我创作一集完整漫剧内容。要求:开头3秒高能抓眼,中段有冲突转折,结尾留强悬念钩子,节奏紧凑、适合短视频流量。首先生成固定统一人物人设:包含脸型、五官、发色、发型、穿搭、身材、气质、画风、光影细节,要求足够精细,保证全程角色不变脸。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1909

猴子排序算法

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

qq_41757528的博客 4915

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

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

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

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

fengdu78的博客 285

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

weixin_39637285的博客 227

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

weixin_39761422的博客 130

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

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

程序员小灰的博客 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、付费专栏及课程。

余额充值