排序算法稳定性分析及其意义

2019-08-05

排序算法

排序.PNG

各种排序方法的性能比较

排序算法比较.PNG

排序算法稳定性分析

sort.jpg

各种排序比较.PNG

结论1.PNG

1.PNG

2.PNG

3.PNG

4.PNG

稳定性的定义

在一张大表内包含了整个年级所有的班的同学的考试成绩,当然为了区别每个同学是来自哪个班的,相应的也有班级这个字段来标识。现在,我们依据总成绩这个字段来将全年级的同学进行一个排名,排序的结果当然是各个班级的学生穿插在一起,大致如下表所示:

姓名班级成绩
张三295
李四193
王五290
赵六380
丁七370

…… …… ……

在得到这样的排序结果之后,我们可以大致了解到每个同学在全年级中的名次,那么如果想要得到每个同学在班级中的名次呢,我们能否在现有排序的基础上,以班级这个字段为依据进行排序呢?如果,我们所采用的排序算法不稳定,那么很可能我们在对班级字段进行排序后得到下面这个结果:

姓名班级成绩
李四193
王五290
张三295
赵六380
丁七370

…… …… ……

我们发现,在班级这个字段进行重排的过程中,张三这条字段虽然调整到李四之后,但是他和王五的相对次序与原表中发生了改变,这样第一次排序中产生的成绩降序这个实际意义在班级这个小的序列中就无法作为参考依据,那么如果我们希望查询学生在班级中的名次,在原大表中不论怎么重排都是无法做到的,任何一个字段的排序就会使得之前排好的其他字段的排序关系失效,我们不得不开辟新的空间来存储各个班的学生数据,花费额外的时间成本和空间成本,这样无疑是非常浪费的。

通过这个案例我们可以看出稳定的排序算法能够对多次排序的结果有记忆功能,帮助我们节省大量的时间和空间成本,从上述案例我们似乎可以发现,稳定与否的关键在于一次排序过程中,数据的位置交换有没有跨越值相等的元素,如果没有跨越,那么结果一定是稳定的,否则是不稳定的。那么到底是不是这样的,我们来通过一些具体的算法来分析一下。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值