1.直接插入排序
1 void insetSort(int *arr, int n)
2 {
3 int i, j, k;
4
5 for(i = 1; i < n; i++)
6 {
7 for(j = i - 1; j >= 0; j--)
8 {
9 if(arr[j] < arr[i])
10 {
11 break;
12 }
13 }
14
15 if(j != i - 1)
16 {
17 int temp = arr[i];
18
19 for(k = i - 1; k > j; k--)
20 {
21 arr[k + 1] = arr[k];
22 }
23
24 arr[k + 1] = temp;
25 }
26 }
27 }
2.希尔排序
1 void insetSort(int *arr, int n, int dk)
2 {
3 int i, j, k;
4
5 for(i = dk; i < n; i++)
6 {
7 for(j = i - dk; j >= 0; j -= dk)
8 {
9 if(arr[j] < arr[i])
10 {
11 break;
12 }
13 }
14
15 if(j != i - dk)
16 {
17 int temp = arr[i];
18
19 for(k = i - dk; k > j; k -= dk)
20 {
21 arr[k + dk] = arr[k];
22 }
23
24 arr[k + dk] = temp;
25 }
26 }
27 }
28
29 void shellSort(int *arr, int n)
30 {
31 int dk = 0;
32
33 dk = n >> 1;
34 while(dk >= 1)
35 {
36 insetSort(arr, n, dk);
37 dk = dk >> 1;
38 }
39
40 }
当希尔排序的步长为1时,就等同于直接插入排序。