#include
#include
void ShellSort(int r[], int n)
{
int i,j,k=0,h;
int t;
int m, index;
int H[50];
m=(int)(log(n)/log(2));
printf("数据m=[%d]\n", m);
for(index=0;index{
H[index]=(int)(pow(2,index));
printf("H[%d]=[%d]\n", index, H[index]);
}
/* 希尔排序的增量序列存放在H中, H[0] = 1 */
for(index=m-1;index>=0;index--) /*改变增量步长的循环 */
{
h=H[index];
printf("h=[%d]\n", h);
for(i=0;i{
for(j=i+h;j{
if(r[j-h]>r[j])
{
t= r[j];
k=j-h;
while(k >= 0 && t{
r[k+h]=r[k];
k-=h;
}
r[k+h]=t;
}
}
}
}
}
int main(void)
{
int num[100];
int n,i,sel;
printf("输入数据长度:");
scanf("%d",&n);
printf("依次输入%d个数据:\n",n);
for(i=0;i{
scanf("%d",&num[i]);
}
ShellSort(num, n);
printf("排序结果为:");
for(i=0;i{
printf("%d ",num[i]);
}
printf("\n");
return 0;
}
这是调试完的
你参考下吧