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

希尔排序(Shell Sort)

时间:2019-06-17 15:45:00      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:分析   增量排序   pre   复杂度   不同   需要   必须   复杂   代码   

希尔排序

思路分析:希尔排序又叫缩小增量排序,通过指定增量序列(尽量取素数且最小增量必须为1)对需要进行排序的数组进行分组,然后每组内部进行一次直接插入排序,不断缩小增量,直到增量为1排序完成。

时间复杂度:不同增量序列时间复杂度不同(希尔增量序列时间复杂度为O(n2)、帕斯增量序列时间复杂度为O(n1.5))。

代码:

void ShellSort(int R[],int n)
{
    int i,j,delta;
    for(delta=n/2;delta>0;delta/=2) //此处增量序列取希尔增量序列(n/2,n/4....)
    {
        for(i=0;i<delta;i++) //根据增量序列对原序列进行分组
        {
            for(j=i+delta;j<n;j+=delta) //对每组内部进行直接插入排序
            {
                if(R[j]<R[j-delta]) //较大元素后移
                {
                    int temp=R[j];
                    int k=j-delta;
                    while(k>=0&&R[k]>temp)
                    {
                        R[k+delta]=R[k];
                        k-=delta;
                    }
                    R[k+delta]=temp; //插入元素
                }
            }
        }
}

希尔排序(Shell Sort)

标签:分析   增量排序   pre   复杂度   不同   需要   必须   复杂   代码   

原文地址:https://www.cnblogs.com/sunnylux/p/11039887.html

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