[基础算法复习]Shell排序

[基础算法复习]Shell排序


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


你可能感兴趣的:([基础算法复习]Shell排序)