算法-希尔排序演示

希尔排序

希尔排序是针对插入排序的改良版。
排序原理:
1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组
2、对分好组的每一组数据完成插入排序
3、减少增长量,最小减为1,重复第二步操作

源码

 /// <summary>
    /// 希尔排序
    /// </summary>
    public class ShellSort
    {

        public static List<int[]> result = new List<int[]>();

        public static void sort(int[] a)
        {
            result.Clear();
            result.Add((int[])a.Clone());
            int N = a.Length;

            //确定增长量

            int h = 1;
            while (h < N / 2)
            {
                h = h * 2 + 1;
            }

            while (h >= 1)
            {
                //找到待插入的元素
                for (int i = h; i < N; i++)
                {
                    //a[i]就是待插入的元素
                    //把a[i]插入到a[i-h]等序列中
                    for (int j = i; j >= h; j -= h)
                    {
                        if (compareTo(a[j - h], a[j]))
                        {
                            exch(a,j,j-h);
                            result.Add((int[])a.Clone());
                        }

                        else
                        {
                            break;
                        }
                    }
                }

                h = h / 2;
            }
        }
        /// <summary>
        /// 判断两个变量之间的大小
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        private static bool compareTo(int a, int b)
        {
            return a > b;
        }

        /// <summary>
        /// 交换两个元素
        /// </summary>
        /// <param name="a"></param>
        /// <param name="i"></param>
        /// <param name="j"></param>
        private static void exch(int[] a, int i, int j)
        {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }

演示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值