/********************************** --修改时间: 2009.5.29 --修改人: 吴强 --修改原因: 从前写的程序不够规范 --输入要求: 无 ***********************************/ #include #define N 20 main() { int i; int iArr[N]={2, 5, 4, 3, 6, 11, 23, 42, 13, 16, 32, 12, 31, 52, 34, 25, 42, 34, 22, 33}; void ShellSort(int iArr[]); void ShellPass(int iArr[],int d); ShellSort(iArr); for (i=0;i< N;i++) { printf("%d,", iArr[i]); } } void ShellSort(int iArr[]) { int i=N; do { i=i/3+1; /*为增量设定值*/ ShellPass(iArr, i); }while (i>1); } void ShellPass(int iArr[],int d) /*d为增量*/ { int i; int j; int k; for (i=d+1;i< N;i++) /*隔d个元素做插入排序*/ { if (iArr[i]< iArr[i-d]) { k=iArr[i]; j=i-d; while(j>0 && k< iArr[j]) { iArr[j+d]=iArr[j]; j=j-d; } iArr[j+d]=k; } } }