#include<stdio.h>
int* shellPass(int number[],int n)
{
int space,i,j,k;//space是增量
for(space=n/2;space>=1;space/=2)//利用增量的个数进行外层循环
{
for(i=0;i<space;i++)//一个增量对应的循环个数
{
int count=0;
for(j=i;j<n;j+=space)//计算这个增量上有数的个数
{
count++;
}
for(j=i+space;j<=i+(count-1)*space;j+=space)//插入排序
{
int t=number[j];
int index=j;
for(k=j-space;k>=i;k-=space)
{
if(number[k]>t)
{
number[index]=number[k];
index=index-space;
}
else
break;
}
number[index]=t;
}
}
}
return number;
}
void main( )
{
int number[]={12,3,23,44,1,7,24,21,4,10,66,56,71,0},*finalNumber;
int length=sizeof(number)/4;
int i;
finalNumber=shellPass(number,length);
for(i=0;i<length;i++)
{
printf("%d ",*finalNumber++);
}
}
转载于:https://my.oschina.net/foreverun/blog/133449