排序稳定性的意义

首先,为什么会有排序算法稳定性的说法?只要能排好不就可以了吗?

看例子
第1行是数字2 记作 1 2
第2行是数字4 记作 2 4
第3行是数字2 记作 3 2

在这里插入图片描述

排序后的结果(如果看不懂命令的意思,参照这个博客
在这里插入图片描述

那么引入我们的问题,有没有可能排序结果是这样子

在这里插入图片描述

排序的结果是正确的,可是它却打乱了原本的文件顺序。

那么在什么场景会出现这种情况呢?

我们在管理数据的时候,比如有ID和体重。那么胖的排前面,轻的排后面,没问题!如果是体重相等呢?那就按服从ID排序了!

起始稳定排序的意义就是保证两次排序结果相同,好好体会这句话的意义。

快速排序和归并排序的平均时间复杂度都是一样的,那为什么不全部都用归并排序?

归并排序需要开辟额外的空间,在数据较小时,可能不占优势。

数组长度快速排序(运行时间/毫秒)归并排序(运行时间/毫秒)
10000
100011
1000013
1000001414
100000079120
100000009821186
1000000005573312328
算法最坏时间复杂性平均时间复杂性
快速排序n^2n*log(n)
归并排序n*log(n)n*log(n)

例子

例如要排序的内容是一组原本按照价格高低排序的对象,如今需要按照销量高低排序,使用稳定性算法,可以使得想同销量的对象依旧保持着价格高低的排序展现,只有销量不同的才会重新排序。(当然,如果需求不需要保持初始的排序意义,那么使用稳定性算法依旧将毫无意义)
换句话说,以某种关键字的方式排序后,能不影响到其他关键字原来排序结果的方法就是稳定的,比如一开始按照价格高低排序结果为 a(10元,卖了5个) b(8元,卖了20个) c(6元,卖了20个) d(4元,卖了30个),则按照销量重拍后如果保持 d(30个,价格为4元) b(20个,价格为8元) c(20个,价格为6元) a(5个,价格为10元),则说明该方法为稳定的,而如果出现c在b前,破坏了排序前b在c前的顺序,则说明这个方法是不稳定的

在这里插入图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值