資料結構之希爾排序

2021-06-18 23:43:29 字數 560 閱讀 6854

直接插入排序在資料量較小而且接近"正序"的時候,時間複雜度可以小至o(n),所以如果我們能夠讓資料量變小且變得接近"正序",然後用直接插入排序就好了。希爾排序就是做這麼個事情,它首先將資料拆成幾部分,即達到縮小資料規模排序,再將資料合併起來,達到整體的"正序",然而將資料的正序並非區域性的"正序",即不是(6,7,8, 3,4,5, 0,1,2),而是整體的正序,所以在將資料分割成幾組的時候不能一堆堆的分割,而應該跳躍式分割,用乙個係數d來控制。

#include using namespace std;
// 希爾插入,和直接插入唯一不同的是,每個元素位置相隔不是1,而是d,其他一模一樣

// 即只要d傳入1,就是直接插入排序

void shellinsert(int src, int d,int n)

}

int main()

; int number = 9;

shellsort(src, number);

for (int i = 0; i <= number; ++i)

cout<

資料結構之 希爾排序

基本思想 將待排序的序列分為若干組,在每組內進行直接插入排序,以使整個序列基本有序,然後再對整個序列進行直接插入排序。該方法實質上是一種分組插入方法。具體來說,先取乙個小於n的整數d1作為增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。現在各組內進行直接插入排序 然後,取第二個...

Java資料結構之希爾排序

希爾排序借用了插入排序,演算法先將要排序的一組數按某個增量gap n 2,n為要排序數的個數 分成若干組,每組中記錄的下標相差gap.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量 gap 2 對它進行分組,在每組中再進行直接插入排序。當增量減到1時,進行直接插入排序後,排序完成。clas...

java資料結構之希爾排序

希爾排序也成為 縮小增量排序 其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列 基本有序 後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略 將相距某個 增量 的記錄組成乙個子串行,這樣才能...