希尔排序(ShellSort)是插入排序的一种 是针对直接插入排序算法的改进算法先将要排序的一组数按某个增量gap分成若干组,每组中记录的下标相差gap.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。
算法代码:
//希尔排序法
void Shell_Sort(int *a,int len)
{
int i,j,k,temp;
for(i=len/2;i>0&&i<len;i=i/2)
{
for(j=i;j<len;j++) //i=5:5,6,7,8,9,10
//i=2:2,3,4,5,6,7,8,9,10
{
temp=*(a+j);
for(k=j-i;k>=0&&temp<*(a+k);k-=i) //i2:挑选0,2,4,6,8,10比较
{
*(a+i+k)=*(a+k);
}
*(a+k+i)=temp;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={12,3,23,4,54,21,65,23,32,55};
int len=sizeof(a)/sizeof(int);
int i;
for(i=0;i<len;i++)
printf("%d\t",a[i]);
Shell_Sort(a,len);
for(i=0;i<len;i++)
printf("%d\t",a[i]);
return 0;
}