資料結構 排序(希爾排序)

2021-09-08 15:05:09 字數 1359 閱讀 8132

//

希爾排序法--插入排序公升級版

#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的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...