希尔排序Shell Sort

希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分

希尔排序介绍

也称缩小增量排序准备待排数组

[ 6 2 4 1 5 9]


首先需要选取关键字,例如关键是3和1(第一步分成三组,第二 步分成一组),那么待排
数组分成了以下三个虚拟组:

[6 1]一组

[2 5]二组

[4 9]三组
看仔细啊,不是临近的两个数字分组,而是3(分成了三组)的倍数的数字为下标的分成了一组,
就是每隔3个数取一一个,每隔三个再取一一个,这样取出来的数字放到一组,把它们当成一组,但不实际分组,只是当成一-组来看,所以 上边的"组"实际上并不存在,只是为了说明分组关系对以上三组分别进行插入排序变成下边这样

[1 6] [2 5] [4 9]

具体过程:

[6 1]6和1交换变成[1 6]

[2 5]2与5不动还是[2 5]

[4 9]4与9不动还是[4 9]

第一趟排序状态演示: 

待排数组:[624 15 9] 

排后数组:[1 2465 9]

第二趟关键字取的是1,即每隔一个取一一个组成新数组,实际上就是只有一组啦,隔一取一就全部取出来了此时待排数组为:

[1 2 4  6 5 9]

//C#语言
class MainClass{
    public static void Main(string[] args)
    {
        int[] arrr = { 6, 2, 4, 1, 5, 9};
        XierPaixu(arrr);
        Console.WriteLine(arrr.GetHashCode());
    }
    static void ShellSort(int[] a)
        {
            for (int i = a.Length / 2; i > 0; i /= 2)
            {
                for (int j = 0; j + i < a.Length; j++)
                {
                    for (int k = j; k + i < a.Length; k += i)
                    {
                        BiDaXiao(ref a[k], ref a[k + i]);
                    }
                }
            }
        }
        public static void BiDaXiao(ref int a, ref int b)
        {
            if (a > b)
            {
                int c = a;
                a = b;
                b = c;
            }
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值