[基础算法复习]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;
}


posted on 2009-07-16 09:33 YZY 阅读(408) 评论(0)  编辑 收藏 引用 所属分类: Algorithm基础算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜