快捷搜索:
来自 计算机编程 2019-06-15 16:33 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

67677新澳门手机版希尔排序

            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]   " ");
               }

对立于最轻易易行的选项排序,插入排序在化解全数某个规律的乱序数组排序时会更有优势,但由于插入排序只会换成相邻的因素,因而元素只好一点一点的从一端移到另一端。
Shell排序轻易的精雕细琢了插入排序,沟通不相邻的要素以对数组的片段进展排序,并最后用插入排序对部分有序的数组排序。

引用:对于普及乱序数组插入排序异常的慢,因为它只会换到相邻的要素,因而成分只好一点一点的从数组的一端移动到另一端。举例,如果主键最小的因素正幸亏数组的界限,要将它挪到准确的地点就须要N-1次活动。希尔排序为了加连忙度轻巧的校勘了插入排序,沟通不相邻的因素以对数组的局地进展排序,并最终用插入排序将部分有序的数组排序。

下面的代码应用的h系列为二分之一(3^k-1)。
希尔排序的合计是使数组中率性间隔为h的因素都以平稳的。那样的数组被称为h有序数组。即便h相当的大,大家就能够将成分移动到很远的地点,为贯彻更加小的h有序数组创制便利。
落到实处希尔排序的一种艺术是对于每一个h,用插入排序将h个子数组独立的排序。但因为子数组是独自的,更简明的措施是在h子数组准将每种成分交流来比他大的成分在此以前去,只需将插入排序的活动元素的离开由1改为h就能够。

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:67677新澳门手机版希尔排序

关键词: