码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序C/C++

时间:2018-04-17 22:25:23      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:sort   次方   c/c++   space   pac   int   算法分析   div   shell   

void ShellSort(int a[],int left,int right);

//对a[left]到a[right]从小到大排序
void ShellSort(int a[],int left,int right)
{
    int len = right - left +1;
    int gap,i,j,temp;
    //Shell提出的增量选取规则n/2,n/4,...,2,1
    for(gap=len/2;gap>0;gap/=2)
        for(i=left+gap;i<=right;i++)
            for(j=i-gap;j>=left && a[j]>a[j+gap];j-=gap){  //a[j]和a[j+gap]为一个子序列
                temp = a[j];            /*当j-=gap后的子序列a[j],a[j+gap]已经处理则*/
                a[j] = a[j+gap];        /*j-=gap仅是为了让其退出本次循环,进而选取下一个子列*/
                a[j+gap] = temp;
            }           
}

/*算法分析:
    time-complexity: 与增量的选取有关,shell选取增量规则时间复杂度为O(n2),
                     帕佩尔诺夫(Papernov)和斯塔舍维奇(Stasevich)提出的 2的k次方+1,...,65,33,17,9,5,3,1
                     其中k为大于等于1的整数,2的k次方+1小于待排序列的长度,此时时间复杂度为O(n1.5次方)    
    space-complexity: O(1);
    算法不稳定.
*/

 

希尔排序C/C++

标签:sort   次方   c/c++   space   pac   int   算法分析   div   shell   

原文地址:https://www.cnblogs.com/daemon94011/p/8870135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!