排序算法稳定性的好处

排序算法稳定性概念

在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中

r[i] = r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,

而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

 

选择排序不稳定的例子:5 8 5 2 9  第一次交换之后 2 8 5 5 9

快速排序不稳定的例子:5 3 3 4 3 8 9 10 11  如果选择第一个数作为基准 , 第一次交换就是3 3 3 4 5 8 9 10 11  

希尔排序不稳定的例子:{ 3, 5, 10, 8, 7, 2, 8, 1, 20, 6 },h=2时分成两个子序列 { 3, 10, 7, 8, 20 } 和  { 5, 8, 2, 1, 6 } ,未排序之前

第二个子序列中的8在前面,现在对两个子序列进行插入排序,得到 { 3, 7, 8, 10, 20 } 和 { 1, 2, 5, 6, 8 } ,即 { 3, 1, 7, 2, 8, 5, 10, 6,

20, 8 } ,两个8的相对次序发生了改变。

堆排序不稳定的例子:{ 9, 5, 7, 5 },堆顶元素是9,堆排序下一步将9和第二个5进行交换,得到序列 { 5, 5, 7, 9 },再进行堆调整

得到{ 7, 5, 5, 9 },重复之前的操作最后得到{ 5, 5, 7, 9 }从而改变了两个5的相对次序

 

稳定的排序算法的好处:从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。这样,有可能减轻系统的开销。

举个例子:

在数据库操作中,如下简单表格:

2(1)4
38
2(2)5
12
49

上表格第一个列,如果需要第一列排序,且使用稳定排序算法可得到

12
2(1)4
2(2)5
38
49

如果使用非稳定的选择排序算法,则得到:

12
2(2)5
2(1)4
38
49

这样第二列并不是有序的。如果需要第二列有序,还需要再次排序一次。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值