void SellInsort(int A[ ],int n){
for(dk=n/2; dk >=1 ;dk=dk/2) //步长每次取半
for(i = dk +1;i <=n ;++i) //处理每个子表
if(A[ i ]<A[ i-dk])
A[0]=A[i]; //对子表进行直接插入排序
for(j=i-dk;j>0&& A[0]<A[j];j=j-dk)
A[ j+dk ] =A[ j ]; //元素后移
A[j+dk]=A[0]; //插入元素
}
void SellInsort(int A[ ],int n){
for(dk=n/2; dk >=1 ;dk=dk/2) //步长每次取半
for(i = dk +1;i <=n ;++i) //处理每个子表
if(A[ i ]<A[ i-dk])
A[0]=A[i]; //对子表进行直接插入排序
for(j=i-dk;j>0&& A[0]<A[j];j=j-dk)
A[ j+dk ] =A[ j ]; //元素后移
A[j+dk]=A[0]; //插入元素
}