所谓希尔排序,是先确定一个组距,然后将以这些组距位距离的数据进行大小比较
一轮比较交换完后就将它,进行组距减半,重复如上操作,直到组距为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>
本文详细介绍了希尔排序算法的工作原理及其实现过程。通过逐步减少数据之间的间隔来进行排序,最终实现整个数组有序排列。提供了完整的C语言代码示例。
372

被折叠的 条评论
为什么被折叠?



