当前位置:3016.com-金沙城中心官网 > 编程 > C# 希尔排序

C# 希尔排序

文章作者:编程 上传时间:2019-10-21

引用:对于广大乱序数组插入排序一点也不快,因为它只会换换相邻的成分,由此成分只好一点一点的从数组的旭日初升端移动到另意气风发端。比方,假使主键最小的要素正万幸数组的限度,要将它挪到科学的地方就须求N-1次活动。希尔排序为了加火速度轻便的核对了插入排序,沟通不相邻的要素以对数组的一些进展排序,并最终用插入排序将部分有序的数组排序。

            int[] sort = new int[13] { 1, 4, 89, 34, 56, 40, 59, 60, 39, 1, 40, 90, 48 };  // 输入一个数组
            int h = 1;
            int length = sort.Length;
            while (h > length / 3)
            {
                h = 3 * h + 1;      // 1,4,13,40,121,364,1093,...
            }   // h的初始值根据数组元素多少而定
            while (h >= 1)  // 当h=1 时排序完成
            {
                for (int i = h; i < length; i++)  // 将间隔为h的元素排序
                {
                    for (int j = i; j >= h && sort[j] < sort[j - h]; j -= h) // 当满足这两个条件时交换 数值
                    {
                        int temp = sort[j];
                        sort[j] = sort[j - h];
                        sort[j - h] = temp;
                    }
                }
                h = h / 3;
            }
            for (int i = 0; i < sort.Length; i++)  // 输出
               {
                    Console.Write(sort[i] + " ");
               }

  备注:文字和代码有参考到图书:算法 第四版(人民邮政和邮电通讯出版社) Hill排序 (162-163)

本文由3016.com-金沙城中心官网发布于编程,转载请注明出处:C# 希尔排序

关键词: