希爾排序又稱縮小增量排序,是插入排序的一種。它的基本思想是先將整個待排記錄序列分割成若干個子串行,然後對這若干個子串行分別進行直接插入排序,等到待排序列基本有序時,再對整個序列進行直接插入排序。
比如如下陣列,先已step=5進行分割。
49,38,65,97,76,13,27,49,55,4
由於step=5,則 將49與13排序,38與27排序,65與49排序,97與55排序,76與4排序
第一趟排序後數列變為:
13,27,49,55,4,49,38,65,97,76
然後step=step/2再次進行排序,直到step=1,最後排序一次,陣列有序。
其排序不穩定,演算法時間複雜度存在爭議。
#include using namespace std;
void sort(int *arrays, int begin, int len, int step);
void shellsort(int *arrays, int len);
int main(void)
; int i;
shellsort(arrays,16);
for (i=0;i<16;i++)
tmp=arrays[i];
for (k=i;k>j+step;k-=step)
arrays[j+step]=tmp; }}
void shellsort(int *arrays, int len)
{ int i;
int step;
step=len/2;
while(step>0)
{ for (i=0;i
排序演算法 四 希爾排序
希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...
排序演算法(四) 希爾排序 增量排序
希爾排序思想 將現有資料分為d個組,在每個分組內使用直接插入排序演算法,使得整個資料段越來越有序。接著繼續將資料分組並使用直接插入排序 分組會越來越小 直到分組為1。每個分組數一般互質 時間複雜度 o n 1.3 1.5 空間複雜度 o 1 穩定性 不穩定 void shell int arr,in...
整理排序演算法(四) 希爾排序
希爾排序 每次都將元素分成一些小組,在小組內進行排序。小組根據元素數量劃分。小組跨度一般是元素數量的一半。此後每次跨度都除以二。一直到最後,小組跨度變成1。這樣就變成插入排序了。希爾排序的複雜度和增量序列是相關的 這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度 最壞情形 是o n 2 h...