什么是稳定的排序算法,举个简单的例子,对四张扑克牌按照牌面值进行升序排序,对于红桃5和黑桃5,牌面值相同,如果使用稳定的排序算法,则排序前是红桃5在前、黑桃5在后的相对顺序,在排序后依然是这个顺序。
如果使用不稳定的排序算法,则红桃5和黑桃5的相对顺序被打乱。
稳定的排序算法有什么作用?
再举个查询学生情况的例子,
先按照年龄升序排序从数据库中查出前四条记录:
学生姓名 | 年龄↑ | 成绩 |
王五 | 9 | 98 |
小明 | 10 | 91 |
张三 | 11 | 80 |
李四 | 11 | 91 |
再点击“成绩”这列,通过前端JavaScript进行升序排序,稳定排序的结果如下图所示:
学生姓名 | 年龄 | 成绩↑ |
张三 | 11 | 80 |
小明 | 10 | 91 |
李四 | 11 | 91 |
王五 | 9 | 98 |
可以发现之前按照年龄升序排列的小明依旧在前,李四在后。这个也是我们希望看到的合理的结果。
另外,具备稳定性的排序算法的主要作用是有利于基数排序的实现,关于基数排序,可参考:
http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html
参考资料:
http://en.wikipedia.org/wiki/Sorting_algorithm#Stability