希尔排序(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; //插入元素
                }
            }
        }
}
posted @ 2019-06-17 15:22  SunnyLux  阅读(546)  评论(0编辑  收藏  举报