排序演算法總結

2021-08-26 10:43:45 字數 1608 閱讀 7542

所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增或遞減次序排列起來。當待排序記錄的關鍵字均不相同時,排序結果是唯一的,否則排序結果不唯一。

1.插入排序

插入排序基本思想:每步將乙個待排序的記錄按其排序碼值的大小,插入到前面已經排好的檔案中的適當位置,直到全部插入完為止。

(1)直接插入排序

在插入第i個記錄時,r1,r2,…,ri-1已經排好序,將第i個記錄依次和r1,r2,…,ri-1進行比較,找到適當的位置。

(2)希爾排序/縮小增量排序

希爾排序是不穩定的。

2.選擇排序

選擇排序的基本思想:每步從待排序的記錄中選出排序碼最小的記錄,順序存放在已排序的記錄序列的後面,直到全部排完。

(1)直接選擇排序

過程:首先在所有記錄中選出排序碼最小的記錄,把它與第1個記錄交換,然後在其餘的記錄內選出排序碼最小的記錄,與第2個記錄交換……依此類推,直到所有記錄排完為止。

直接選擇排序是不穩定的。

(2)堆排序

父結點》子結點,大頂堆

父結點《子結點,小頂堆

注意:對於結點i,i>=n/2時,表示結點i為葉子結點

調整:從n/2結點開始,然後2/n -1個結點

把根結點和最後乙個結點對調,把指標斷開,調整,繼續對調,調整。

堆排序不適宜於記錄數較少的檔案。堆排序是就地排序,為不穩定的排序演算法。

3.交換排序

交換排序的基本思想:兩兩比較待排序記錄的排序碼,並交換不滿足順序要求的那些偶對,直到滿足條件為止。

(1)氣泡排序

兩兩比較,輕氣泡向上漂浮,每次迴圈求出最大值。

氣泡排序是就地排序,且是穩定的。

(2)快速排序

採用分治法,基本思想:將原問題分解為若干個規模更小但結構與原問題相似的子問題,遞迴的解這些子問題,然後將這些子問題的解組合為原問題的解。

如,對關鍵碼進行排序,選擇第乙個元素為基準

第一步:【3 2 51 6】7【8 9】

第二步:【1 2】3【5 6】7【8 9】

第三步: 1 2 3 【5 6】7【8 9】

第四步: 12 3 5 6 7【8 9】

結果: 1 2 3 5 6 7 8 9

快速排序是不穩定的。

4.歸併排序

將兩個或兩個以上的有序子表合併成乙個新的有序表,初始看作n個長度為1的有序子表,依次兩兩合併得到長度為2的若干有序子表,再兩兩合併,直到得到長度為n的有序表。

如,對關鍵碼進行排序,過程如下:

72 28 51 17 96 62 87 33

【62 96】【33 87】

【17 28 51 72】【33 62 87 96】

【17 2833 51 62 72 87 96】

歸併排序是一種穩定的排序,不是就地排序。

5.基數排序(收集個位,收集十位,收集百位)

從低位到高位依次對待排序的關鍵碼進行分配和手機,經過d趟分配和收集可以得到乙個有序序列。

基數排序是穩定的。

6.演算法複雜性比較

穩定排序演算法:在排序過程中是否會改變相同關鍵字的順序。

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...