淺談 各種排序的穩定性


前言

本文只是解釋為什么該排序穩不穩定,不進行排序的講解,所以適合有了排序的基礎再來瀏覽

 

穩定性

也就是說一個序列中的相同值,它排序后,它的相同值的順序不會改變即穩定

 

冒泡(穩定)

冒泡原理遵循大數下沉小數冒泡,思路是每次相鄰兩個進行交換,因為是每次找到當前最小數然后進行一格一格的移動,因為是一格一格的一道,相同的數字並不會出現后一個數字跳兩格的情況跳到前面,只可能是兩個數一起前移或者后移,所以該排序是穩定的

 

選擇(不穩定)

選擇原理和冒泡差不多,但是它省去了相鄰交換的這個步驟,直接找到最小的位置,直接換過來,這個的交換移動位置就是跳躍式的,也可能出現兩個數,前一個被換到后面去

例子  5 9 5 2     第一個5會與2進行交換,然后就出現了兩個相同值出現順序改變的情況,因為第一個5在移動,而第二個5沒有移動,所以就可能出現這種情況,冒泡是整體的移動

 

插入(穩定)

插入就是從后往前一個一個的找,然后找到適合位置就放在這,也是整體往后移,很明顯,穩不穩定取決於當前判斷是<=還是<,這種人為可以操控的都是穩定的

 

快速排序(不穩定)

快排的話很明顯的一個不穩定的地方就是一個指針從前往后,一個指針從后往前,然后后一個指針換到前一個位置,但是這個指針又是往另一方向走的,這就和我們順序相悖了

例子 2 3 3 3 1 1 1

這樣相同的數肯定是以相反的順序換過去

 

歸並(穩定)

歸並的核心地方就在於有序歸並這塊兒,歸並的時候是判斷兩個數的大小然后再放,那么我們只要控制兩個相同數都是前一個序列先放那么就能保證穩定性了

 

堆排(不穩定)

這個就比較那個了,一棵樹,然后下沉的時候可能是左子樹可能是右子樹,如果相同值在左子樹,然后自己降到右子樹那么就不穩定了

例子   3 3 2

         3(1)                           2

       /        \         ->          /      \

 3 (2)         2         3(2)    3(1)

 

 

希爾排序(不穩定)

希爾排序的是通過取增量然后划分成不同分組,最后增量不斷減小,來將分組合並的,主要利用了插入排序的最好情況O(n)的思想,如果本身大量有序,那么需要比較次數就減小了很多,因為希爾排序是同各國不同分組的,也就是說如果兩個相同值划分在了不同分組的話,那么就有可能出現順序顛倒問題,從而不穩定

 例子   3(1)    3(2)     1    4

第一輪   1    3(2)     3(1)     4

第二輪    同上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM