希尔排序
#include<stdio.h>
//希尔排序
void ShellSort(int A[],int n){
int j;
//A[0]暂存单元,不是哨兵,当j<=0时,插入位置已到
for(int d=n/2;d>=1;d/=2){//步长变化
for(int i=d+1;i<=n;++i){
if(A[i]<A[i-d]){//需将A[i]插入有序增量子表
A[0]=A[i];//暂存在A[0]
for(j=i-d;j>0&&A[0]<A[j];j-=d){
A[j+d]=A[j];//记录后移,查找插入的位置
}
A[j+d]=A[0];//插入
}
}
}
}
int main(){
int n;
int A[10];
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&A[i]);
}
ShellSort(A,n);
for(int i=1;i<=n;i++){
printf("%d ",A[i]);
}
return 0;
}