//定义增量序列Dm>D-₁>…>D₁=1(m,m-1是下标)
//对每个Dk进行“Dk-间隔”排序(k=m,m-1,...1)
//注意:“Dk-间隔”有序的序列,在执行“Dk-₁—间隔”排序后,仍然是“Dk—间隔”有序的
//Dm=N/2,Dk=Dk+₁/2
//最坏情况下:T = Θ(N²)(O表示上届,Ω表示下届,Θ既是上届,又是下届)
void Shell_sort(ElementType A[], int N)
{
for (D=N/2;D>0;D /= 2) //希尔增量序列
{
for(P=D;P<N;P++) //插入排序
{
Tmp = A[P];
for(i=P;i>=D && A[i-D]>Tmp;i-=D)
{
A[i] = A[i - D];
}
A[i] = Tmp;
}
}
}