4-7 ShellSort.c
1 #include <stdio.h> 2 #include "4-1 CreateData.c" //生成随机数的函数 3 #define ARRAYLEN 10 //需要排序的数据元素数量 4 void ShellSort(int a[],int n)//希尔排序 5 { 6 int d,i,j,x; 7 d=n/2; 8 while(d>=1) //循环至增量为1时结束 9 { 10 for(i=d;i<n;i++) 11 { 12 x=a[i]; //获取序列中的下一个数据 13 j=i-d; //序列中前一个数据的序号 14 while(j>=0 && a[j]>x) //下一个数大于前一个数 15 { 16 a[j+d]=a[j]; //将后一个数向前移动 17 j=j-d; //修改序号,继续向前比较 18 } 19 a[j+d]=x; //保存数据 20 } 21 d/=2; //缩小增量 22 } 23 } 24 int main() 25 { 26 int i,a[ARRAYLEN]; //定义数组 27 for(i=0;i<ARRAYLEN;i++) //清空数组 28 a[i]=0; 29 if(!CreateData(a,ARRAYLEN,1,100)) //判断生成随机数是否成功 30 { 31 printf("生成随机数不成功!\n"); 32 getch(); 33 return 1; 34 } 35 printf("原数据:"); //输出生成的随机数 36 for(i=0;i<ARRAYLEN;i++) 37 printf("%d ",a[i]); 38 printf("\n"); 39 ShellSort(a,ARRAYLEN); //调用希尔排序函数 40 printf("排序后:"); 41 for(i=0;i<ARRAYLEN;i++) //输出排序后的结果 42 printf("%d ",a[i]); 43 printf("\n"); 44 getch(); 45 return 0; 46 }
时间: 2024-10-12 20:35:03