希尔排序代码理解【防遗忘】

解法1 : 

 void ShellSort(int* arr, int size)
{
    int gap = size;
    while (gap > 1)
    {
        gap = gap 2;    //调整希尔增量
        int i = 0;
        for (i = 0; i < size - gap; i++)    //从0遍历到size-gap-1
        {
            int end = i;  //end:需比较的位置
            int temp = arr[end + gap];  //保存未排序过的某个值
            while (end >= 0)
            {

          //在↓的情况下需要循环判断。end一直向前隔gap遍历,与新的数据即temp进行比较。如316
                if (arr[end] > temp)
                {

                    //end处插入更小的值temp,同时end向前,让temp与这小组里前面的值比较。
                    arr[end + gap] = arr[end];
                    end -= gap;
                }
                else
                { 

                    //如果136中的36都有序,加上前面的13已排过序,就都有序了。退出循环继续遍历i
                    break;
                }
            }

            //把temp值还给最后位置
            arr[end + gap] = temp;    //以 end+gap 作为插入位置
        }
    }
}
 

如有错误欢迎大佬批评指正和交流~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值