排序算法
因為一直在做應用開發的緣故,自大學學習了數據結構和算法
後,就較少使用到算法的知識,大多使用編程語言自帶的排序方法。最近項目時間相對寬裕,就想再次拾起那遺落在角落的排序算法知識。
冒泡排序
是我最先接觸的排序算法,記得大一老師開始講解這個算法的時候,通過循序漸進的講解,在最後還特地帶我們對這個算法進行了簡單的優化,那時感覺,原來算法是這麼好玩。但這個優化卻並沒有多大的效率改善,但因時間複雜度擺在這裏,效率也是墊底的。這個排序算法也是最容易理解的。
排序算法可以分為內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸並排序、快速排序、堆排序、基數排序等。用一張圖概括:
關於時間複雜度:
- 平方階 (O(n2)) 排序 各類簡單排序:直接插入、直接選擇和冒泡排序。
- 線性對數階 (O(nlog2n)) 排序 快速排序、堆排序和歸並排序;
- O(n1+§)) 排序,§ 是介於 0 和 1 之間的常數。 希爾排序
- 線性階 (O(n)) 排序 基數排序,此外還有桶、箱排序。
關於穩定性:
穩定的排序算法
:冒泡排序、插入排序、歸並排序和基數排序。不是穩定的排序算法
:選擇排序、快速排序、希爾排序、堆排序。
名詞解釋:
n
:數據規模
k
:“桶”的個數
In-place
:占用常數內存,不占用額外內存
Out-place
:占用額外內存
穩定性
:排序後 2 個相等鍵值的順序和排序之前它們的順序相同
常用排序算法
冒泡排序
選擇排序
插入排序
希爾排序
歸並排序
快速排序
堆排序
計數排序
桶排序
基數排序
Link : 排序算法
最後更新:2017-08-13 22:34:42