Shell Sort (排序详解之 希尔排序)

希尔排序

 

本篇文章将介绍希尔排序。

 

重点:

1.计算 "希尔索引"  ->index ,一般初始值定为arr.length / 2,做为最外层循环 index > 0

2.设第二层循环i = index , I[index,arr.Count) i++,设最内层循环 j = i , j[index,i ] ,对比arr[j]arr[j-index] ,如果小于(或大于)交换,如果 j-index>=0 , j-=index,循环执行

3.每次重设希尔索引”: index/=2

 

这么一看有点小复杂,现在我们一步一步说明希尔排序的过程:

 

 

同样,我们以一个数组为例:

5, 1, 9 , 3, 7 , 4 , 8 ,6 , 2

 

第一轮:

 


 

 

 

 

 

 

 

 

 

 

 

 

 


第一轮结束,第二轮 index/=2 = 4/2 = 2

 

 

 


           

                                                          

 

 

 

 


第三轮: i/=2 =2/2 = 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


第四轮:index/2 = 0 < 1 ,跳出循环,排序结束。

 

 

参考代码:

public List<int>ShellSort(List<int> arr)
       {
           var sortedArr = new List<int>();
           arr.ForEach(sortedArr.Add);
 
           if (sortedArr.Count < 2) return sortedArr;
 
           var index = sortedArr.Count / 2;
           while (index >= 1)
           {
                for (var i = index; i <sortedArr.Count; i++)
               {
                    for (var j = i; j >=index; j -= index)
                    {
                        if (sortedArr[j] <sortedArr[j - index])
                        {
                            var tmp =sortedArr[j];
                            sortedArr[j] = sortedArr[j - index];
                            sortedArr[j -index] = tmp;
                        }
                    }
 
                }
                index /= 2;
           }
           return sortedArr;
       }


完。

 

希望现在您已经明白了希尔排序,感谢您的阅读!:)

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值