稳定排序
稳定排序:
待排序的记录序列中可能存在两个或两个以上关键字相等的记录。排序前的序列中Ri领先于Rj(即i<j).若在排序后的序列中Ri仍然领先于Rj,则称所用的方法是稳定的。
参考 这儿
顾名思义,不能满足上述条件的,就是非稳定排序了。
排序分类
哪些是稳定排序,哪些是非稳定排序呢?
稳定:
非稳定排序
快速排序,希尔排序,简单选择排序,堆排序1
稳定排序好处
说了这么多,当然是有好处的,不然谁会用呢?
举个简单的列子吧:
比如我们先根据数值进行排序,得到的稳定排序结果是:
a[0][z] a[1][y] a[2][x] a[2][y] a[2][x] a[3][z]
如果我们想对排序后的结果,再根据x, y , z 进行排序,我们希望是基于已有的重新再做一次排序。
a[2][x] a[2][x] a[1][y] a[2][y] a[0][z] a[3][z]
非稳定排序得到的结果有可能是:
a[2][x] a[2][x] a[1][y] a[2][y] a[0][z] a[3][z]
或者
a[2][x] a[2][x] a[2][y] a[1][y] a[0][z] a[3][z]
对比两次的结果来看,已经排序好的顺序都不会被改变,否则非稳定排序的第二种结果,就不是我们希望看到的了。
注脚的解释 ↩︎