假定在待排序的記錄序列中, 存在多個具有相同關鍵字的記錄, 若經過排序, 這些記錄的相對次序保持不變
即:在原序列中, a=b, 且a在b之前, 而排序後, a仍在b之前, 則稱為這種排序演算法是穩定的, 否則稱為不穩定的.
如1,44,22, 55,22,99.
原始數列中,有兩個22. 但粗號的22.是在22的後面。
那麼穩定性排序完成後就該為:
1, 22,22, 44, 55, 99
不穩定性排序完成後可能為:
1,22,22, 44, 55, 99
穩定性排序的意義或優點:
穩定性的好處。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個鍵上排序,第乙個鍵排序的結果可以為第二個鍵排序所用。基數排序就是這樣,先按低位排序,逐次按高位排序,低位相同的元素其順序再高位也相同時是不會改變的
通俗點說,穩定性排序的意義就是
1、如果只是簡單的進行數字的排序,那麼穩定性將毫無意義。
2、如果排序的內容僅僅是乙個複雜物件的某乙個數字屬性,那麼穩定性依舊將毫無意義(所謂的交換操作的開銷已經算在演算法的開銷內了,如果嫌棄這種開銷,不如換算法好了?)
3、如果要排序的內容是乙個複雜物件的多個數字屬性,但是其原本的初始順序毫無意義,那麼穩定性依舊將毫無意義。
4、除非要排序的內容是乙個複雜物件的多個數字屬性,且其原本的初始順序存在意義,那麼我們需要在二次排序的基礎上保持原有排序的意義,才需要使用到穩定性的演算法,例如要排序的內容是一組原本按照**高低排序的物件,如今需要按照銷量高低排序,使用穩定性演算法,可以使得想同銷量的物件依舊保持著**高低的排序展現,只有銷量不同的才會重新排序。(當然,如果需求不需要保持初始的排序意義,那麼使用穩定性演算法依舊將毫無意義)。
選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法
氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法
end.
排序演算法的穩定性理解
說到穩定性,與之對應就是不穩定性,那麼排序演算法的穩定性又為何意呢?通俗地講就是,能保證排序前兩個相等的數其在序列的前後位置順序與排序後它們的前後位置順序一致。形式化解釋如下 一列數中,如果ai aj,ai位於aj的前置位,那麼經過公升降序排序後ai仍然位於aj的前置位。那麼排序穩定性又有什麼優勢和...
排序演算法穩定性
學習中,有個問題叫做排序演算法穩定性 若待排序的序列中,存在多個具有相同關鍵字的記錄,經過排序,這些記錄的相對次序保持不變,則稱該演算法是穩定的 若經排序後,記錄的相對 次序發生了改變,則稱該演算法是不穩定的。假定在待排序的記錄序列中,存在多個具有相同鍵值的記錄,若經過排序,這些記錄的相對次序保持不...
排序演算法穩定性
快速排序 希爾排序 堆排序 直接選擇排序不是穩定的排序演算法,而基數排序 氣泡排序 直接插入排序 折半插入排序 歸併排序是穩定的排序演算法 首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai...