1 /************************************************************************/
2 /* 希尔排序,称为增量排序更好记忆
3 /* 增量选取为N/2,虽不是个好的增量,但是便于理解
4 /************************************************************************/
5 #include <stdio.h>
6
7 void ShellSort(int * array, int size)
8 {
9 int Gap, i, j;
10 int tmp;
11 for(Gap = size / 2; Gap > 0; Gap /= 2)
12 {
13 for(i = Gap; i < size; i += Gap)
14 {
15 tmp = array[i];
16 for(j = i; array[j - Gap] > tmp && j > 0; j -= Gap)
17 {
18 array[j] = array[j - Gap];
19 }
20 array[j] = tmp;
21 }
22 }
23 }
24
25
26 int main()
27 {
28 int Array[10] = {5, 45, 36, 48, 20, 17, 84, 201, 92, 54};
29 for (int index = 0; index < 10; ++index)
30 {
31 printf("%d ", Array[index]);
32 }
33
34 ShellSort(Array, 10);
35
36 printf("\r\n");
37
38 for (int index = 0; index < 10; ++index)
39 {
40 printf("%d ", Array[index]);
41 }
42 return 0;
43 }