排序算法中的稳定性
稳定性是什么
如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为稳定的
《算法》第四版
在进行排序的时候,难免会出现相同元素的值。比如:[7, 4, 4, 3, 8, 9]对该数组进行排序,使用不同的排序算法都会变得有序,但有些算法不能保证数列中两个四的相对位置,我将[7, 4, 4, 3, 8, 9]数列中第一个4,命名为A,第二个四命名为B, 数组 [7, A, B, 3, 8, 9]。经过排序算法后,如果A,B的相对位置(即排序后A还在B的前面)没有发生改变,则称该排序算法是稳定的,否则是不稳定的。
稳定性有什么用
来看看那处理这段数据,目前给出的是按照时间大小排序
地名 | 时间 |
---|---|
A | 9:00 |
B | 10:00 |
C | 11:00 |
B | 12: 00 |
假如我们现在采用不稳定的算法,按照地名进行排序。
地名 | 时间 |
---|---|
A | 9:00 |
B | 12: 00 |
B | 10:00 |
C | 11:00 |
发现观察地名B的时间排序又乱了,如果采用的是稳定算法
地名 | 时间 |
---|---|
A | 9:00 |
B | 10:00 |
B | 12: 00 |
C | 11:00 |
那就解决这个问题了。
当我们需要稳定性时,我们才关注稳定性,如果不使用,稳定性对于我们而言是可忽略。
有什么排序是不稳定,又有什么排序是稳定的
稳定性 | 算法 |
---|---|
稳定的 | 插入,归并 |
不稳定的 | 希尔,快速排序,堆排序,选择排序 |