1. 程式人生 > 其它 >C筆記 - 演算法:希爾排序

C筆記 - 演算法:希爾排序

希爾排序

1 - 1959 年 Shell 發明的第一個突破 O(n2) 的排序演算法,是簡單插入排序的改進版。它與插入排序的不同之處在於它會優先比較距離較遠的元素

2 - 希爾排序又叫縮小增量排序,它通過比較相距一定間隔的元素來進行,各趟比較所用的距離隨著演算法的進行而減小,直到只比較相鄰元素的最後一趟排序為止

① 第一趟,gap = length/2 = 4

② 第二趟,增量縮小為 2

③ 第三趟,增量縮小為 1,得到最終排序結果

3 - 程式碼示例

 1     // 陣列
 2     int array[] = {12,91,21,10,13};
 3     int length = sizeof
(array)/sizeof(array[0]);// 5 個元素 4 5 6 // 最外層控制增量,迴圈縮小 7 for (int gap = length/2; gap > 0; gap = gap/2) { 8 9 // 中間控制需要遍歷的趟數:趟數 + gap = length 10 // 如 gap = 1,需遍歷 4 趟; gap = 2;需要遍歷 3 趟....... 11 for (int i = gap; i < length; i++) { 12 13 14
printf("----- gap = %d 第 %d 趟 ------\n\n",gap,i-gap +1); 15 int j = i; 16 int current = array[i]; 17 18 while (j - gap >= 0 && current < array[j - gap]) { 19 array[j] = array[j - gap]; 20 j = j - gap;
21 } 22 array[j] = current; 23 24 int n = 0; 25 while (n < length) { 26 printf("%d\t",array[n]); 27 n++; 28 } 29 printf("\n\n"); 30 } 31 32 }

日誌列印