拿{ 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了;但要證明算法穩定,就要對算法設計進行徹底分析了。