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;
        }
    }
}

posted @ 2018-09-03 10:34  dishfo  阅读(167)  评论(0)    收藏  举报