希尔排序算法思想

希尔排序_排序

核心代码
//希尔排序
void ShellSort(int a[] , int length){
    int i,j;
    int tmp,gap;//tmp为哨兵,gap为分组的步长
    for(gap=length/2;gap>0;gap=gap/2){	//将记录表按照步长划分为若干子表
        for(i=0;i<gap;i++){	//分别对子表进行直接插入排序
            for(j=i+gap;j<length;j+=gap){
                if(a[j] < a[j-gap]){
                    tmp=a[j];
                    j=j-gap;
                    while(j>=0 && tmp<a[j]){
                        a[j+gap]=a[j];
                        j-=gap;
                    }
                    a[j+gap]=tmp;
                }
            }
        }
    }
}