//希爾排序法--插入排序公升級版
#include#include
#include
#include
/*強調:網上,書上的希爾排序法都有問題
希爾排序並非按乙個增量d,將乙個陣列分成若干小的陣列,對每個陣列進行插入排序,
真正的希爾排序步驟
第一步,通過業界常規 d = 陣列長度 / 3 + 1; 求出增量d
第二步:取陣列第乙個元素,按照增量d的間隔 組成乙個新的陣列,對這個陣列進行增量排序
第三步:再次獲取增量d d = d / 3 + 1; 還是獲取陣列的第乙個元素 按照增量d的間隔 組成乙個新的陣列,對這個陣列進行增量排序
第四步:重複第三步
注意:①每次插入排序的都是第乙個元素對應的新陣列,沒有對第二個元素對應的陣列(或者第n個元素對應的陣列)進行排序
②希爾排序當d=1的時候 仍然執行了一輪,當d=1 其實就是對整個陣列進行一次插入排序
我個人感覺這比插入排序還多了幾步
*///
列印陣列
void print(int * arr, int
num)
int i = 0
;
for (int i = 0; i < num; i++)
printf("\n
");}//
希爾排序
void shellsort(int *arr, int
len)
arr[k] =temp;}}
//列印陣列
printf("
\n第%d輪\n
", gap);
print(arr, len);
} while (gap>1);}
void
test();
//定義時間型別變數
time_t ts;
//生成隨機數種子
srand((unsigned int)time(&ts));
for (i = 0; i < 10; i++)
//列印陣列
printf("
\n原始資料----\n");
print(arr,
10);
//希爾排序
printf("
希爾排序之後的資料\n");
資料結構(排序) 希爾排序
希爾排序 希爾排序又稱縮小增量排序,是1959年由d.l.shell提出來的。演算法描述 1 先取定乙個小於n的整數gap1作為第乙個增量,把整個序列分成gap1組。所有距離為gap1的倍數的元素放在同一組中,在各組內分別進行排序 分組內採用直接插入排序或其它基本方式的排序 2 然後取第二個增量ga...
資料結構 排序 希爾排序
希爾排序的基本思想是 先將待排序表分割成若干形如l i,i d,i 2d,i kd 的子表,分別進行直接插入排序,當整個表中的元素有序的時候,再對全體記錄進行一次直接插入排序。時間複雜度 o n 穩定性 不穩定 適用性 僅適用於順序表 下面投放希爾排序的 include include includ...
資料結構 希爾排序!!!
希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...