Shell排序
void shellSort(int * a,int n){
int gap=n/2;
while(gap>0){
inGap(gap,a,n);
gap/=2;
}
}
void inGap(int gap,int *a,int n){
for(int i=gap;i<n;i++){//减少了for循环的层数
int temp=a[i];
int j=i;
if(temp<a[i-gap]){//插入排序
while(j-gap>=0&&temp<a[j-gap]){
a[j]=a[j-gap];
j-=gap;
}
a[j]=temp;
}
}
}

浙公网安备 33010602011771号