數據結構的排序總結

排序:按關鍵字的非遞減或非遞增順序對一組記錄重新進行排序的操作。

 

排序的穩定性:假設i位和j位的值相等,排序前後的i位和j位的前後順序依舊不變,則稱所有的排序方法是穩定的。若有一組關鍵字不滿足要求,則該排序方法就是不穩定的。

 

排序中依據原則來分類:

插入排序、交換排序、選擇排序、歸併排序、基數排序

排序中依據過程工作量來分類:

簡單排序,時間複雜度O(n2)

先進排序,時間複雜度O(nlog2n) 快速排序、歸併排序、堆排序

基數排序:時間複雜度O(d·n)

 

插入排序:

直接插入排序:順序查找,時間複雜度O(n2),空間複雜度O(1)


折半插入排序:折半查找,時間複雜度O(n2),空間複雜度O(1),比較次數與待排序序列的初始排列無關。

希爾排序:縮小增量排序,時間複雜度位O(n3/2), 空間複雜度O(1)。


 

 

交換排序:
冒泡排序:時間複雜度O(n2),空間複雜度O(1)。



快速排序:時間複雜度O(nlog2n),空間複雜度最好爲O(log2n),最壞爲O(n).

1.     附設兩個指針high和low,設置樞軸關鍵字pivotkry

2.     從表最右側位置,依次向左搜索第一個關鍵字小於piv的記錄和樞軸記錄交換。

3.     從表的最左側位置,依次向右搜索找到第一個關鍵字大於piv的記錄和樞軸記錄交換。

4.     重複2和3步驟,直到low等於high。


 

幾趟排序後:

 

選擇排序:

簡單選擇排序:時間複雜度O(n2),空間複雜度O(1)。選最小。

 

初始關鍵字:

一趟排序結果:  49  38  65 97  49  13 27  76

二趟排序結果:  13  38  65 97  49  49 27  76

三趟排序結果:   13  27 65  97  49  49  38  76

四趟排序結果:   13  27  38  49  97 49  65  76

五趟排序結果:   13  27  38  49  49 97  65  76

六趟排序結果:   13  27  38  49  49 65  97  76

七趟排序結果:   13  27  38  49  49 65  76  97

 

堆排序:時間複雜度O(nlog2n),空間複雜度O(1)。樹形選擇排序。反覆進行交換和堆調整。

當父結點的鍵值總是大於或等於任何一個子節點的鍵值時爲最大堆。當父結點的鍵值總是小於或等於任何一個子節點的鍵值時爲最小堆

堆排序就是將無序序列建立成初堆以後,反覆進行交換和堆調整。

 

詳細圖解可參考

http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html

 

 

歸併排序:時間複雜度O(nlog2n),空間複雜度O(n)。

 

基數排序:不建立在關鍵字的基礎上。


圖示來源於嚴蔚敏的數據結構C語言版。

發佈了43 篇原創文章 · 獲贊 33 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章