什么是“稳定”?

稳定是针对排序的一种分类方式。

稳定排序:
插入排序,基数排序,归并排序,冒泡排序,计数排序

不稳定排序:
快速排序,希尔排序,简单选择排序,堆排序

​​排序C代码​​

那么稳定的排序到底是什么呢?

我把稳定理解为:先到者优势

比如在高中的时候,每次考完试都会在班门口贴出一张成绩排名表,成绩越高,排名越靠前。但是难免有时候会有成绩一样的两个同学,张三和李四都是98分,一个第8名,一个第9名。

那么到底是张三第8名还是李四第8名呢?

其实这和输入成绩的顺序有关。我们把成绩输入到excel表不会麻烦的先把试卷按照成绩排个序在输入,而是先输入成绩,然后使用excel的排序功能排序,在打印出成绩单。

如果张三的成绩比李四的成绩先输入到excel表中,那么按照稳定的排序之后,张三排名一定是比李四考前。如果我们使用不稳定的排序,张三和李四的排名谁前谁后就是随机的。

稳定排序的定义:

待排序的记录序列中可能存在两个或两个以上关键字相等的记录。排序前的序列中Ri领先于Rj(即i<j).若在排序后的序列中Ri仍然领先于Rj,则称所用的方法是稳定的。

比如int数组[1,1,1,6,4]中a[0],a[1],a[2]的值相等,在排序时不改变其序列,则称所用的方法是稳定的。