【C#】希尔排序 Shell‘s Sort

基本原理

希尔排序(Shell‘s Sort)的原理是将排序序列分成若干子序列依次进行插入排序。希尔排序是对插入排序的优化,引入步数概念,将序列分成若干子序列,对子序列进行插入排序。

希尔排序是非稳定排序算法。

优点:在极限情况下可以有效降低普通插入排序的时间复杂度。

代码实现

int[] array = { 1, 11, 10, 5, 9, 7, 8, 6, 3, 2, 4};

//1. 第一轮:以数组长度的1/2为第一个步长,后面每一轮步长在原步长上除以2,步长小于1结束
for (int step = array.Length / 2; step > 0; step/=2)
{
    //2. 在确定的步长下进行插入排序
    for (int i = step; i < array.Length; i+=step)
    {
        //确定初始排序条件
        //排序区与非排序区分界索引值
        int sortIndex = i - step;
        //非排序区第一个元素值
        int noSortNumber = array[i];
        //满足条件进入,序列元素向后移动一个步长
        while (sortIndex >= 0 && noSortNumber < array[sortIndex])
        {
            array[sortIndex + step] = array[sortIndex];
            sortIndex -= step;
        }
        array[sortIndex + step] = noSortNumber;
    }
}
for (int i = 0; i < array.Length; i++)
{
    Console.Write($"{array[i]} ");
}

总结

  1. 设置步长,步长不停缩短;

  2. 三层循环,一层获取步长,一层索引值获取未排序区元素,一层找到合适位置插入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值