算法 | 希尔排序
希尔排序算法思想
核心代码
//希尔排序
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;
}
}
}
}
}