增量选择的是唐纳德增量,对于增量的选择,有好多种,时间复杂度也不同主要典型的有:
#include<iostream>
#include<cstdio>
using namespace std;
void ShellSort(int a[],int n)
{
int i;
for(int D=n/2;D>0;D/=2)
{
for(int p=D;p<n;p++)
{
int temp=a[p];
for(i=p;i>=D&&a[i-D]>temp;i-=D)
a[i]=a[i-D];
a[i]=temp;
}
}
}
int main()
{
int n,a[105];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
ShellSort(a,n);
for(int i=0;i<n;i++)
printf("%2d",a[i]);
printf("\n");
return 0;
}