##希尔排序
(为了debug方便,把排序写在了主函数里)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[9]={58,8,23,4,3,9,6,12,1};
int temp,i,j,len=9;
int inc = len;
while(inc>1)
{
inc = inc/3+1; //定义一组数的间隔,最后一次循环间隔一定为一
for(i=inc;i<len;i++)
{
int key = a[i];
j=i-inc;
while(j>=0)
{
if (key<a[j]) //如果相隔inc个的一组数排列大小相反,则交换他们的位置
{
temp=a[j];
a[j]=key;
a[j+inc]=temp;
}
j=j-inc;
}
}
}
for(i=0;i<9;i++)
{
printf("%d ",a[i]);
}
return 0;
}