資料結構中的各種排序 總結篇

2021-05-23 10:50:23 字數 4407 閱讀 8708

乙個月沒有寫文章,原因是一直在忙碌著,但是其實是有收穫的,下面就是我這前半個月最大的收穫:對於資料結構中排序演算法的總結,在我找工作的道路上幫助了我好多。如有錯誤,歡迎指正!

一、 基本概念:

1、 

排序:按照一定的關鍵字,將乙個序列排列成想要得到的乙個新的序列。

2、 

內部排序和外部排序:整個排序過程完全在記憶體中進行,叫做內部排序。資料量較大需要借助外部儲存裝置才能完成,叫做外部排序。

3、 

主關鍵字和此關鍵字:

4、 

排序的穩定性:對於相同的元素來說,在排序之前和之後的書訊是一樣的,那麼這種排序就是穩定的排序,如果順序發生了變化,那麼就是不穩定排序。

二、 插入類排序:

(一)  

思想:在乙個已經排好序的序列中,將未被排進的元素按照原先的規定插入到指定位置。

(二)  

分類:1、 

直接插入排序:

①  

思想:最基本的插入排序,將第i個插入到前i-1個中的適當位置。

②  

時間複雜度:t(n) = o(n²)。

③  

空間複雜度:s(n) = o(1)。

④  

穩定性:穩定排序。迴圈條件while(r[0].key < r[j].key)保證的。

⑤  

程式:2、  折半插入排序:

①  

思想:因為是已經確定了前部分是有序序列,所以在查詢插入位置的時候可以用折半查詢的方法進行查詢,提高效率。

②  

時間複雜度:比較時的時間減為o(n㏒n),但是移動元素的時間耗費未變,所以總是得時間複雜度還是o(n²)。

③  

空間複雜度:s(n) = o(1)。

④  

穩定性:穩定排序。

⑤  

程式:3、 

希爾排序:

①  

思想:又稱縮小增量排序法。把待排序序列分成若干較小的子串行,然後逐個使用直接插入排序法排序,最後再對乙個較為有序的序列進行一次排序,主要是為了減少移動的次數,提高效率。原理應該就是從無序到漸漸有序,要比直接從無序到有序移動的次數會少一些。

②  

時間複雜度:o(n的1.5次方)

③  

空間複雜度:o(1)

④  

穩定性:不穩定排序。,2和1一組4和2一組,進行希爾排序,第乙個2和最後乙個2會發生位置上的變化。

⑤  

程式: 三、

交換類排序:

(一)  

思想:通過交換逆序元素進行排序的方法。

(二)  

分類:1、 

氣泡排序:

①  

思想:反覆掃瞄待排序序列,在掃瞄的過程中順次比較相鄰的兩個元素的大小,若逆序就交換位置。第一趟,從第乙個資料開始,比較相鄰的兩個資料,(以公升序為例)如果大就交換,得到乙個最大資料在末尾;然後進行第二趟,只掃瞄前n-1個元素,得到次大的放在倒數第二位。以此類推,最後得到公升序序列。如果在掃瞄過程中,發現沒有交換,說明已經排好序列,直接終止掃瞄。所以最多進行n-1趟掃瞄。

②  

時間複雜度:t(n) = o(n²)。

③  

空間複雜度:s(n) = o(1)。

④  

穩定性:穩定排序。

⑤  

程式:2、 

快速排序:

①  

思想:氣泡排序一次只能消除乙個逆序,為了能一次消除多個逆序,採用快速排序。以乙個關鍵字為軸,從左從右依次與其進行對比,然後交換,第一趟結束後,可以把序列分為兩個子串行,然後再分段進行快速排序,達到高效。

②  

時間複雜度:平均t(n) = o(n㏒n),最壞o(n²)。

③  

空間複雜度:s(n) = o(㏒n)。

④  

穩定性:不穩定排序。

⑤  

程式: 四、

選擇類排序:

(一)  

思想:每一趟在n – i + 1 ( i = 1,2, …, n - 1)個記錄中選取關鍵字最小的記錄作為有序序列中的第i個記錄。

(二)  

分類:1、 

簡單選擇排序:

①  

思想:第一趟時,從第乙個記錄開始,通過n – 1次關鍵字的比較,從n個記錄中選出關鍵字最小的記錄,並和第乙個記錄進行交換。第二趟從第二個記錄開始,選擇最小的和第二個記錄交換。以此類推,直至全部排序完畢。

②  

時間複雜度:t(n) = o(n²)。

③  

空間複雜度:s(n) = o(1)。

④  

穩定性:不穩定排序,。

⑤  

程式:2、 

樹形選擇排序:

①  

思想:為了減少比較次數,兩兩進行比較,得出的較小的值再兩兩比較,直至得出最小的輸出,然後在原來位置上置為∞,再進行比較。直至所有都輸出。

②  

時間複雜度:t(n) = o(n㏒n)。

③  

空間複雜度:較簡單選擇排序,增加了n-1個額外的儲存空間存放中間比較結果,就是樹形結構的所有根節點。s(n) = o(n)。

④  

穩定性:穩定排序。

⑤  

程式:3、 

堆排序:

①  

思想:把待排序記錄的關鍵字存放在陣列r[1…n]中,將r看成是一刻完全二叉樹的順序表示,每個節點表示乙個記錄,第乙個記錄r[1]作為二叉樹的根,一下個記錄r[2…n]依次逐層從左到右順序排列,任意節點r[i]的左孩子是r[2i],右孩子是r[2i+1],雙親是r[i/2向下取整]。然後對這棵完全二叉樹進行調整建堆。

②  

時間複雜度:t(n) = o(n㏒n)。

③  

空間複雜度:s(n) = o(1)。

④  

穩定性:不穩定排序。

⑤  

程式:(1)    

調整堆:

(2)    

建初堆:

(3)    

堆排序: 五、

歸併排序:

(一)  

思想:(二)  

分類:1、 

歸併排序:

①  

思想:假設初始序列右n個記錄,首先將這n個記錄看成n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到n/2向上取整 個長度為2(n為奇數時,最後乙個序列的長度為1)的有序子串行。在此基礎上,在對長度為2的有序子串行進行兩兩歸併,得到若干個長度為4的有序子串行。如此重複,直至得到乙個長度為n的有序序列為止。

②  

時間複雜度:t(n) = o(n㏒n)。

③  

空間複雜度:s(n) = o(n)。

④  

穩定性:穩定排序。

⑤  

程式: 六、

分配類排序:

(一)  

思想:分配類排序是利用分配和收集兩種基本操作。

(二)  

分類:1、 

多關鍵字排序:

2、 

鏈式基數排序:

①  

思想:先分配,再收集,就是先按照乙個次關鍵字收集一下,然後進行收集(第乙個排序),然後再換乙個關鍵字把新序列分配一下,然後再收集起來,又完成一次排序,這樣所有關鍵字分配收集完後,就完成了排序。

②  

時間複雜度:t(n) = o( d ( n + rd ) )。

③  

空間複雜度:s(n) = o(rd)。

④  

穩定性:穩定排序。

⑤  

程式:七、 總結:

(1)簡單排序法一般只用於n較小的情況(例如n<30)。當序列的記錄「基本有序」時,直接插入排序是最佳的排序方法。如果記錄中的資料較多,則應採用移動次數較少的簡單選擇排序法。

(2)快速排序、堆排序和歸併排序的平均時間複雜度均為o(n㏒n),但實驗結果表明,就平均時間效能而言,快速排序是所有排序方法中最好的。遺憾的是,快速排序在最壞情況下的時間效能為o(n²)。堆排序和歸併排序的最壞時間複雜度仍為o(n㏒n),當n較大時,歸併排序的時間效能優於堆排序,但它所需的輔助空間最多。

(3)可以將簡單排序法與效能較好的排序方法結合使用。例如,在快速排序中,當劃分子區間的長度小於某值時,可以轉而呼叫直接插入排序法;或者先將待排序序列劃分成若干子串行,分別進行直接插入排序,然後再利用歸併排序法,將有序子串行合併成乙個完整的有序序列。

(4)基數排序的時間複雜度可以寫成o(d·n)。因此,它最適合於n值很大而關鍵字的位數d較小的序列。當d遠小於n時,其時間複雜度接近o(n)。

(5)從排序的穩定性上來看,在所有簡單排序法中,簡單選擇排序是不穩定的,其他各種簡單排序法都是穩定的。然而,在那些時間效能較好的排序方法中,希爾排序、快速排序、堆排序都是不穩定的,只有歸併排序、基數排序是穩定的。

資料結構中的各種排序總結

1 簡單排序法一般只用於 n較小的情況 例如 n 30 當序列的記錄 基本有序 時,直接插入排序是最佳的排序方法。如果記錄中的資料較多,則應採用移動次數較少的簡單選擇排序法。2 快速排序 堆排序和歸併排序的平均時間複雜度均為 o n n 但實驗結果表明,就平均時間效能而言,快速排序是所有排序方法中最...

資料結構中的各種查詢 總結篇

一 基本概念 1 列表 待搜尋的資料集合。2 關鍵字 要查詢的那個資料。3 查詢 一種演算法過程。二 基於線性表的查詢 1 順序查詢 1 思想 逐個比較,直到找到或者查詢失敗。2 時間複雜度 t n o n 3 空間複雜度 s n o n 4 程式 2 折半查詢 1 思想 又稱二分查詢,對於已經按照...

資料結構中內部排序總結

1 首先說乙個概念 穩定排序與非穩定排序 如果乙個序列中原來相同的元素,排序完成後,仍然保持著原來的順序,那麼就成為穩定排序,反之就是非穩定排序。2 1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組...