分享好友 最新动态首页 最新动态分类 切换频道
【数据结构与算法】万字剖析八大排序(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序)
2024-12-25 17:24

【数据结构与算法】万字剖析八大排序(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序)

直接插入排序性能分析:
时间复杂度:O(N^2),最好情况当数据本来就有序时可以做到O(N)
空间复杂度:直接插入排序并没再开过一段连续的空间所以为O(1)

完整代码如下,我们看到while循环中的判断即是让tmp小于的数据 不断向前覆盖 直到找到小于tmp的数据 或者 end小于0(前面没有可比较的数据)时 跳出循环将数据插入。

 
 
 

希尔排序性能分析:
时间复杂度:最坏O(N^ 2) ,平均在<数据结构>严蔚敏中给出O(N^1.3);
空间复杂度:O(1);

完整代码如下,如有疑问随时私信或者在评论区提出。

 
 
 
 
 

选择排序性能:
时间复杂度:O(N^2);
空间复杂度:O(1);

正确代码如下:

 
 

堆排序在之前我就写过文章讲解,这里就不赘述了。需要注意的是:排升序、建大堆,排降序、建小堆文章堆和堆排序的链接

选择排序性能:
时间复杂度:O(N^2);
空间复杂度:O(1);

 
 
 
 

快速排序性能:
时间复杂度:O(N*logN)最坏O(N^2)
空间复杂度:O(1);

此版本需要注意的是如果将左边第一个作为基准值就需要让右边先走,需要小于基准值的数据相反就让左边先走

 
 
 
 
 
 
 
 

我们知道快速排序的效率是很高的,特别是处理无序的数据时,但是当数组为有序时,时间复杂度就会下降到O(N^2),这是因为我们总是将第一个数据作为基准值导致的。这里就有个优化的方法———三数取中———它将比较mid left right的数据,取中值作为基准值,使得即使数据有序,效率也不会太差。

 

(1)快速排序非递归

上文快速排序的三个版本都使用了递归,当数据量过大,建立的栈帧空间过多时,容易产生栈溢出,导致错误。所以我们要学习 将代码从递归改为非递归避免错误 是以后我们工作的必备技能。
快速排序的非递归需要使用到栈 使用栈辅助改为循环。
如何利用栈将快排改为循环呢?我们将数组左右下标压入栈为了出栈顺序为先左后右,我们则要先压右下标,再压左下标。然后当栈非空时就 继续弹出区间给快排函数排序,当左右区间数据少于1时停止压栈。

 
 
 

归并排序性能:
时间复杂度:O(N*logN)
空间复杂度:O(N);归并排序需要的辅助空间较多,所以常用于解决磁盘的外排序问题

完整代码如下:

 

(2)归并排序非递归

 

而且非递归版本不想递归有mid,便于控制区间,其区间的控制需要理解:

 

到这里我们就不免有个疑问,不同于上图所示,如果数据为奇数,不能正好的分区间,那该怎么办呢
我们则需要在区间控制,再判断一下区间是否越界以及相关的处理。

 
 
  1. end1就越界了,begin2和end2肯定也就越界了,这时只有左区间的部分数据有效所以无法进行比较+排入,所以这时的gap是错误了,此次循环不进行直接。
  2. begin2和end2越界时,这时只有左区间有效无法进行比较+排入与第一种情况相同直接
  3. 最后一种情况只有end2越界了,我们只需将end2赋为正常区间之内即可
    调整代码如下:
 

完整代码如下:

 

上面的代码是归并一部分就拷贝一部分,也可以在for循环外一次性拷贝进去,一次性拷贝对区间的控制更为麻烦,这里就不过多赘述。感兴趣的可以在我的gitee中找到代码匿名者Unit码云

计数排序属于非比较排序,适合范围集中,并且范围不大的整形数组排序。

计数排序性能:
时间复杂度:O(N+range)
空间复杂度:O(range);

完整代码如下:


最新文章
这10个在线AI绘图工具太好用了,设计师们快来get!
无论你是一名专业的插画师,还是一个富有创造力、想随时随地记录生活灵感的人,现在只需要拿起平板或打开电脑浏览器,就能将头脑中的画面描绘出来。本篇文章,我们挑选了10款功能强大又方便好用的在线画图软件
高清美女写真不再是梦!用AI绘图工具一步到位,快速生成你的AI女友!
Midjourney:这个工具以其独特的艺术风格著称,非常适合那些追求创意和艺术效果的用户。Midjourney本质上是一个通过Discord平台操作的AI,可以生成神秘而梦幻的美女图像,非常适合用于社交媒体上的艺术展示。缺点是对于普通用户来说,学习
百度文库APP切入考研场景,上线“AI考研宝典”专区
多知12月17日消息,近日,百度文库APP上线了“AI考研宝典”专区,设置了“政治知识梳理”和“每日时政速记”功能,帮助考生快速梳理政治知识、了解时政信息。此外,“考研英语范文”和“英语作文美化”功能能够帮助考生快速掌握英文作文高
男科资讯:温州东瓯医院是不是正规医院?温州正规男科医院排名看点
  男科资讯:温州东瓯医院是不是正规医院?温州正规男科医院排名看点,温州男科医院排名:1.温州东瓯医院男科,2.温州男科医院,3.温州东瓯医院。温州东瓯医院男科作为专注男科诊疗的医院,医院坚持引进前卫的男科诊疗技术和治疗设备,为
竞价推广这么玩,花1元店铺可获10元的收益!
新店开业还在为没有流量而苦恼?眼睁睁听着隔壁老王家时不时响起“您有新的饿了么订单……”,心里别提有多心酸了!饿了么竞价排名,分分钟让你霸占25名以内的排名,订单蹭蹭涨不停!竞价推广是什么?商家通过竞价(付费)的方式增加自己店
如何解决房屋内墙面渗水问题?这些方法有哪些实际效果?
房屋内墙面渗水是一个令人头疼的问题,不仅影响美观,还可能导致墙面发霉、脱落,甚至影响居住者的健康。下面为您介绍一些解决房屋内墙面渗水问题的方法及其实际效果。1. 外墙防水涂料:在外墙表面涂刷防水涂料,形成一层防水膜,阻挡雨水
梦幻西游全服第一童子 18技能资质不差感受人生巅峰
  逆袭无级别的玩家有上千个,但是绝大多数的无级别装备价格都在10万以下,价格能到50万以上的少之又少!童子不一样,他是目前梦幻西游里175级玩家用来打服战的最佳选择。内丹数量6个、天生成长资质高、有必带技能,合成多技能的童子可比
(2024版)天翼云从业者认证考试题库(多选题汇总).docxVIP
(2024版)天翼云从业者认证考试题库大全-下(多选题汇总)第一部分多选题1.边缘节点是相对于网络复杂结构而提出的一个概念,指距离最终用户接入具有较少的中间环节的网络节点,对最终接入用户有较好的什么?A、运维能力B、响应能力C、安全能力D
贵阳夜生活指南:2024年热门商务KTV与夜总会排名及包厢价格概览
发布时间:2024-12-14 14:45:01贵阳,这座光与影交织的城市,以其独特的魅力吸引着八方来客。夜幕降临,华灯初上,贵阳的夜生活也随之拉开帷幕。你可以体验到别具一格的休闲娱乐方式,无论是逛街购物,还是享受夜总会的繁华,都能让人沉醉
上海徐汇线上青少年编程培训名单大全一览
课程单价:250元课时数:80节全部校区:童程童美少儿编程(南城中心)课程内容:课程采用SPIKE硬件以编程逻辑为主要学习目标,引导学生进行自主设计、搭建、编程,培养学生独立解决问题的能力。课程中还引入知名科创挑战活动的经典项目,锻
相关文章
推荐文章
发表评论
0评