1 #include <iostream>
2 using namespace std;
3 void ShellSort(int a[],int n)
4 {
5 int temp;
6 int dk = n;
7 do //调整步长循环
8 {
9 dk = dk/3+1;
10 for(int i=0; i<dk; i++) //对每一分组进行排序
11 {
12 for(int j=i+dk; j<n; j = j+dk) //对指定分组进行直接插入排序
13 {
14 for(int k=i;k<j;k=k+dk) // 寻找元素位置
15 {
16 if(a[j]<a[k])
17 {
18 temp = a[j];
19 for(int h = j;h>k;h = h-dk)
20 a[h] = a[h-dk];
21 a[k] = temp;
22
23 }
24 }
25 }
26 }
27 }while(dk>1);
28 }
29 int main()
30 {
31 int a[10] = {4,10,9,8,7,6,5,4,3,2};
32 ShellSort(a,10);
33 for(int l=0;l<10;l++)
34 cout<<a[l]<<" ";
35 getchar();
36 return 0;
37 }