不穩定排序
阿新 • • 發佈:2019-01-01
假設有這樣一個待排序列表:
排序前: 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重複的越多,排序越不穩定;那麼你的分頁也是混亂的