Shell排序使用一个递增序列h1,h2,h3...hk. h1==1。
从hk开始,每次将间隔hx的序列排好序,直到h1。间隔hx的序列排好序的数组可以称之为hx有序。
Shell排序有一个重要的性质是一个hx有序数组,必然是一个hx+1有序数组。
每一遍排序过程可以使用插入排序。
Shell排序的性能取决于递增序列的选择。下面代码的递增序列是len/2,len/4...,1.
int shell_sort(int *array,int begin,int end)
{
if(array==NULL||begin>end) return 0;
int len = end-begin+1;
int i,j,gap,tmp;
for(gap=len/2;gap>=1;gap/=2){
for(i=begin+gap;i<=end;++i){
j = i;
tmp = array[j];
while( j-gap>=begin&&array[j-gap]>tmp ){
array[j] = array[j-gap];
j-=gap;
}
array[j] = tmp;
}
}
return 1;
}