排序演算法 之希爾排序及時間複雜度分析

2021-10-05 22:14:40 字數 824 閱讀 6433

希爾排序

演算法思想:將整個待排序列分割成若干個子串行(由相隔增量個元素組成),分別進行直接插入排序,然後依次縮小增量再進行排序,待整個序列中的元素基本有序時,再對全體元素進行一次直接插入排序。

希爾排序的實現應該由三個迴圈完成

(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...