算法与数据结构之排序算法总结

本文深入探讨了排序算法的稳定性,并分别对插入排序、归并排序、快速排序和堆排序进行了详细的稳定性分析。此外,还提供了通过自定义比较函数来解决排序稳定性问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结一下排序算法

总览

排序算法的稳定性(stable)

稳定排序:对于相等的元素,在排序后,原来靠前的元素依然靠前,相等元素的相对位置没有发生变化。

插入算法的稳定性分析

初始情况如上图所示,对于三个3, 当红色的3排好序时,在比较绿色的3和红色的3时,优化只有小于才插入,所以保持顺序。

归并算法的稳定性分析

类似插入排序。

快速排序算法的稳定性分析

由于选取哨兵点时是随机的, 可能选取到前面相同的数字或者后面向桐的数字,排序算法不稳定。

堆排序算法的稳定性分析

举一个反例:极端情况下所有数字相同,在进行下面代码的时候:

//$arr已经是一个堆了,下面进行原地堆排序
//从最后一个元素开始,先和第一个元素交换,然后再对第一个元素heapify
for ($i=$n-1; $i > 0 ; $i--) { 
  swap( $arr, 0 , $i);
  shiftDown($arr, $i, 0);
}
复制代码

由于进行了第一个元素和最后一个元素交互,所以不满足。

通过自定义比较函数,解决稳定性问题

bool operator < ($student, otherStudent){
	return score != otherStudent.score ? score > otherStudent.score : name < otherStudent.name
}

复制代码

-------------------------华丽的分割线--------------------

看完的朋友可以点个喜欢/关注,您的支持是对我最大的鼓励。

个人博客番茄技术小栈掘金主页

想了解更多,欢迎关注我的微信公众号:番茄技术小栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值