希爾排序
演算法思想:將整個待排序列分割成若干個子串行(由相隔增量個元素組成),分別進行直接插入排序,然後依次縮小增量再進行排序,待整個序列中的元素基本有序時,再對全體元素進行一次直接插入排序。
希爾排序的實現應該由三個迴圈完成
(1)第一次迴圈,將增量d依次折半,直到增量d=1
(2)第二三層迴圈,也就是直接插入排序所需要的兩次迴圈。
演算法實現
#include
#define n 9
intmain
(void);
int d = n /2;
//增量先取一半
int i,j,insertval;
//希爾排序三層迴圈
while
(d>=1)
//當增量大於等於1,不斷進行插入排序
arr[j+d]
= insertval;
} d = d /2;
}for
(i=0
; i)return0;
}
由如上**知,希爾排序的關鍵並不是隨便分組後各自排序,而是將相隔某個增量的記錄組成乙個子串行,實現跳躍式移動,使得排序的效率高。
時間複雜度
時間複雜度為o(n^1.5),要好於直接排序的o(n ^ 2),需要注意的是增量序列的最後乙個增量值必須是1.另外由於記錄跳躍式的移動,希爾排序並不是一種穩定的排序方法。
排序演算法之 歸併排序及時間複雜度分析
歸併排序 歸併排序是建立在歸併操作上的一種有效排序演算法,該演算法是採用分治法的乙個典型應用。這裡的分治如何理解?比如我們要統計本縣城的高考狀元,而乙個縣城中有很多中學,每個中學又有若干個班級,每個班級有若干名學生,每個學生是乙個單獨個體,看成陣列中的乙個元素。接下來,班級內學生兩兩組合併排好序組成...
排序演算法之 簡單選擇排序及時間複雜度分析
簡單選擇排序 基本思想 比較 交換 1.從待排序序列中,找到關鍵字最小的元素 2.如果最小元素不是待排序序列的第乙個元素,將其和第乙個元素互換 3.從餘下的 n 1 個元素中,找出關鍵字最小的元素,重複 1 2 步,直到排序結束。因此我們可以發現,簡單選擇排序也是通過兩層迴圈實現。第一層迴圈 依次遍...
氣泡排序 選擇排序 插入排序演算法及時間複雜度詳解
流程 把0到n個元素中的最大值放在n位置 把0到n 1個元素中的最大值放在n 1位置 把0到n 2個元素中的最大值放在n 2位置 時間複雜度 嚴格的o n2 的演算法 即使資料已經排好序,還要全部按照程式流程比較 交換一遍,所以稱為嚴格o n2 氣泡排序演算法 defbubbling sort ls...