1. 程式人生 > >不穩定排序

不穩定排序

假設有這樣一個待排序列表:

排序前:              1             3           2          4            5          2

排序前的下標:a[0]       a[1]       a[2]      a[3]       a[4]     a[5]

排序後:             1              2           2         3            4          5

排序後的下標:a[0]       a[1]      a[2]     a[3]      a[4]      a[5]


如果排序後的a[1]是排序前的a[2],排序後的a[2]是排序前的a[5];這樣的排序就是穩定的;否則,就是不穩定的;也就是說,排序前值相等的元素,排序後,相同元素的位置和排序前的先後順序保持一致;

思考一個問題:

不穩定排序和穩定排序問題對於排序結果沒有什麼影響啊,管它是穩定還是不穩定的呢?

但是,要注意:如果你有一個分頁的功能,按某一個欄位排序,這個排序欄位有很多的重複的值,如果是穩定排序,你的分頁就沒問題,如果是不穩定排序,那麼就會有問題;因為重複的欄位,順序是不穩定的;

比如,第一頁有重複,第二頁也有重複的,那麼你的第一頁和第二頁的那部分排序欄位重複的行,有可能會出現在第二行,也有可能出現在第一行;這樣去做一些業務邏輯可能會有問題;比如ES,不指定排序欄位,預設的排序是不穩定的;ES預設的排序,恰恰就是按 _score的desc,score重複的越多,排序越不穩定;那麼你的分頁也是混亂的