希尔排序(by Donald Shell)

本文详细介绍了希尔排序算法的具体实现过程及核心思想,通过定义增量序列并对序列进行“Dk-间隔”排序来逐步缩小元素间的距离,最终达到完全有序的状态。希尔排序在最坏情况下的时间复杂度为Θ(N²)。

//定义增量序列Dm>D-₁>…>D₁=1(m,m-1是下标)

//对每个Dk进行“Dk-间隔”排序(k=m,m-1,...1)

//注意:“Dk-间隔”有序的序列,在执行“Dk-₁—间隔”排序后,仍然是“Dk—间隔”有序的

//Dm=N/2,Dk=Dk+₁/2

//最坏情况下:T = Θ(N²)(O表示上届,Ω表示下届,Θ既是上届,又是下届)

void Shell_sort(ElementType A[], int N) 
{
    for (D=N/2;D>0;D /= 2) //希尔增量序列
    {
        for(P=D;P<N;P++)  //插入排序
        {
            Tmp = A[P];
            for(i=P;i>=D && A[i-D]>Tmp;i-=D)
            {
                A[i] = A[i - D];
            }
            A[i] = Tmp;
        } 
    } 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值