將原本大量記錄數的記錄進行分組。分割成若干個子串行,然後在這些子串行內分別進行直接插入排序,當整個序列都基本有序時,再對全體記錄進行一次直接插入排序。
基本有序:基本有序的意思就是小的關鍵字基本在前面,大的基本在後面,不大不小的基本在中間。像;但像9在第二位,1在倒數第一位就談不上基本有序。
分割策略:將相距某個「增量」的記錄組成乙個子串行,這樣才能保證子串行內分別進行直接插入排序後得到的結果是基本有序而 不是區域性有序;應當注意增量序列的最後乙個增量值必須等於1才行。
**:
#include#includevoid shell(int arr, int len, int dk)//對乙個分組中的序列使用直接插入排序演算法
arr[j + dk] = tmp; }}
void shellsort(int arr, int len, int dk, int dlen)
}int main2()
; int len = sizeof(arr) / sizeof(arr[0]);
int dk = ;//增量
int dlen = sizeof(dk) / sizeof(dk[0]);
shellsort(arr, len, dk, dlen);
return 0;
}
希爾排序的關鍵並不是隨便分組後各自排序,而是將相隔某個「增量」的記錄組成乙個子串行,實現跳躍式的移動,使得排序的效率提高。迄今為止沒有人找到一種最好的增量序列。不過大量的研究表明當增量序列為
可以獲得不錯的效率,其時間複雜度為
2)。
資料結構 希爾排序!!!
希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...
資料結構 希爾排序
1 希爾排序是在直接插入排序的基礎上改良而來的,直接插入排序需要記錄基本有序的情況下才能變得很高效,希爾排序便是採取跳躍分割的策略,將相距 增量 的元素組成乙個子串行,這樣才能保證最後進行直接插入排序時的序列是基本有序的。希爾排序的時間複雜度是 2 希爾排序實現演算法 include include...
資料結構 希爾排序
希爾排序是donald shell於1959年提出來的一種排序演算法,它是第一批突破這個時間複雜度的演算法之一。大話資料結構對這個演算法的講解,我看得一知半解的,之後網上找了下資料,發現維基百科對這個演算法的講解非常不錯,特在此整理一波。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 先上個維...