所谓希尔排序,是先确定一个组距,然后将以这些组距位距离的数据进行大小比较
一轮比较交换完后就将它,进行组距减半,重复如上操作,直到组距为1
排序完成后就得到我们想要的
下面上代码,代码上有局部解释
<span style="font-size:18px;">#include<stdio.h>
int a[10]={21,56,43,12,3,99,56,23,2,12};
main(){
int group,j,k,temp,len;
len=sizeof a/sizeof a[0];
for(group=len/2;group>0;group/=2){ //进行分组,每次是第一次的一般
for(j=group;j<len;j++){ //确定分组
for(k=j-group;k>=0;k-=group){//将这次分组的组距都进行排序一遍,0,1,2,3,4
if(a[k]>a[k+group]){ //将这些组距下的数据进行排大小 然后重复
temp=a[k];
a[k]=a[k+group];
a[k+group]=temp;
}
}
}
}
for(int p=0;p<len;p++)
printf("%4d",a[p]);
}</span>