希尔排序(Shell Sort)

Posted sunnylux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序(Shell Sort)相关的知识,希望对你有一定的参考价值。

希尔排序

思路分析:希尔排序又叫缩小增量排序,通过指定增量序列(尽量取素数且最小增量必须为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)的主要内容,如果未能解决你的问题,请参考以下文章

希尔排序(Shell Sort)

希尔排序Shell sort

希尔排序(Shell sort)

排序算法:Shell Sort 希尔排序

Java学习笔记——排序算法之希尔排序(Shell Sort)

Shell Sort(希尔排序)