注意:步长因子除1外应没有公因子,且最后一个步长因子因子必须为1。
#include<stdio.h>
void insertShellSort(int a[],int n,int d[],int t)
{
int k=0;
for(k=0;k<t;k++)
{
int span=d[k];//步长因子,本趟的增量
int i=0;
int h=0;
int j=0;
for(i=span+1;i<=n;i++)
{
if(a[i]<a[i-span])//小于时,需插入有序表
{
a[0]=a[i];
for(j=i-span;j>0&&a[0]<a[j];j=j-span)
{
a[j+span]=a[j];//记录后移
//printf("%d#",a[j]);
}
a[j+span]=a[0];
//printf("!!!\n");
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
int a[n+1];
int i=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int t=0;
scanf("%d",&t);
int d[t];
for(i=0;i<t;i++)
{
scanf("%d",&d[i]);
}
insertShellSort(a,n,d,t);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
}