排序演算法

排序演算法

在電腦科學所使用的排序演算法通常依以下標準分類:

計算的時間複雜度(最差、平均、和最好表現),依據串列(list)的大小(

n

{\displaystyle n}

)。一般而言,好的表現是

O

(

n

log

n

)

{\displaystyle O(n\log n)}

(大O符號),壞的表現是

O

(

n

2

)

{\displaystyle O(n^{2})}

。對於一個排序理想的表現是

O

(

n

)

{\displaystyle O(n)}

,但平均而言不可能達到。基於比較的排序演算法對大多數輸入而言至少需要

O

(

n

log

n

)

{\displaystyle O(n\log n)}

記憶體使用量(以及其他電腦資源的使用)

穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如果一個排序演算法是穩定的,當有兩個相等鍵值的紀錄

R

{\displaystyle R}

S

{\displaystyle S}

,且在原本的串列中

R

{\displaystyle R}

出現在

S

{\displaystyle S}

之前,在排序過的串列中

R

{\displaystyle R}

也將會是在

S

{\displaystyle S}

之前。

排序的方法:插入、交換、選擇、合併等等。

穩定性

編輯

穩定排序紙牌的例子。當紙牌用穩定排序按點值排序的時候,兩個5之間必定保持它們最初的次序。在用不穩定排序來排序的時候,兩個5可能被按相反次序來排序。

當相等的元素是無法分辨的,比如像是整數,穩定性並不是一個問題。然而,假設以下的數對將要以他們的第一個數字來排序。

(

4

,

1

)

(

3

,

1

)

(

3

,

7

)

(

5

,

6

)

{\displaystyle (4,1)(3,1)(3,7)(5,6)}

在這個狀況下,有可能產生兩種不同的結果,一個是讓相等鍵值的紀錄維持相對的次序,而另外一個則沒有:

(

3

,

1

)

(

3

,

7

)

(

4

,

1

)

(

5

,

6

)

{\displaystyle (3,1)(3,7)(4,1)(5,6)}

(維持次序)

(

3

,

7

)

(

3

,

1

)

(

4

,

1

)

(

5

,

6

)

{\displaystyle (3,7)(3,1)(4,1)(5,6)}

(次序被改變)

不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地實作為穩定。作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,(比如上面的比較中加入第二個標準:第二個鍵值的大小)就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。

相关推荐