拿{ 6,2,4,6,1}举例。
a[0] | a[1] | a[2] | a[3] | a[4] |
6 | 2 | 4 | 6 | 1 |
有两个6,a[0]和a[3]。排序结果就有两种可能:
1 | 2 | 4 | 6 | 6 |
原a[4] | 原a[1] | 原a[2] | 原a[0] | 原a[3] |
原a[4] | 原a[1] | 原a[2] | 原a[3] | 原a[0] |
如果排序结束后,a[0]可以保证一定在a[3]前头,也就是他们原有的顺序不变,那这种排序算法就是稳定的。(比如常见的冒泡排序、基数排序、插入排序、归并排序、桶排序、二叉树排序等都是稳定的排序算法)
反之,如果不能保证原有顺序,这种算法就是不稳定的。(比如常见的选择排序,希尔排序,堆排序,快速排序等都是不稳定的排序算法)
要证明一种排序算法不稳定,举出一组例子就OK了;但要证明算法稳定,就要对算法设计进行彻底分析了。