排序算法的稳定性

稳定性体现

  • 最初听到稳定性这个概念时,我认为稳定性是体现在时间复杂度上,例如快排的时间复杂度并不稳定,最差情况会退化到O(n^2),但实际定义并不是如此
  • 其实排序算法的稳定性体现在其相同键值的两个对象在排序后相对位置并不改变

稳定性应用

  • 比如氪金的场景下,假设我们以充值费用的高低来决定玩家在游戏中享受进入副本的先后,当充值费用相同时,我们以需要以充值的先后来决定玩家进入副本的顺序,如果排序不稳定,则无法保证先充值的玩家先进入

各个算法的稳定性

  • 冒泡:稳定,每次对比交换,相同的话不会换,时间复杂度O(n^2)
  • 选择:不稳定(例如数组[3, 8 , 3, 1, 4]),第一选择会将首个3和1的位置交换,两个3的顺序就被交换了
  • 插入:稳定,从已排好序的数组末尾开始插入,相同的数不会改变相对位置
  • 快速:不稳定,每次两两交换时就有很大概率破坏相对位置(例如[8,9,7,2,9,3]),第一次就会把首个9和3交换,直接破坏了9的稳定性
  • 归并:稳定,归并是将整个数组分到无可分,当只有一个或两个元素时,元素相同时并不会交换位置
  • 基数:稳定,每次基于某一位入桶,不会改变相同元素的相对位置
  • 希尔:不稳定,每次在自己组内进行插入排序,很容易改变相同元素的相同位置
  • 堆排序: 不稳定,每次组成大根堆或者小根堆时顺序不一定一致
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油光发亮的小猛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值