{
for(int gap=n/2gap>=1gap=gap/2)//以增量为d进行直接插入排序
{
CountCompare[1]++
for(int i=d+1i<=ni++)//将r[i]插入到所属的子序列中
{
r[0]=r[i]//暂存被插入记录
CountMove[1]++
for(int j=i-dj>0&&r[0]<r[j]j=j-gap)
{
r[j+d]=r[j]//记录后移gap个位置,保证仍在同一个子序列
CountCompare[1]++
CountMove[1]++
}
r[j+gap]=r[0]
CountMove[1]++
}
for(int k=1k<=nk++)
cout<<r[i]<<" "
}
}
//主程序就麻烦自己写了
void main(){
datatype R[MAXNUM]
int d[6]=[50,25,12,6,3,2,1]
for(int i=0i<MAXNUMi++)
scanf("%d",&R[i].key)
ShellSort(R,MAXNUM,d,6)
for(int i=0i<MAXNUMi++)
printf("%d",R[i].key)
}