zoukankan      html  css  js  c++  java
  • [练手5]希尔排序

    目      标      用C#实现希尔排序

    思      想    

                     希尔排序(Shell Sort)又称为“缩小增量排序”。是1959年由D.L.Shell提出来的。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
    具体做法:首先确定一组增量d0,d1,d2,d3,...,dt-1()其中n>d0>d1>...>dt-1=1),对于i =0,1,2,...,t-1,依次进行下面的各趟处理:根据当前增量di将n个元素分成di个组,每组中元素的下标相隔为di;再对各组中元素进行直接插入排序

    实现
            public void Sort(int[] intArray)
            {
                int k;
                int j;
                int intTemp;

                //计算步长
                for ( k = 1; k <= intArray.Length/3; k = k * 3 + 1) ;

                //循环比较
                while (k > 0)
                {
                    //插入排序
                    for (int i = k + 1; i <= intArray.Length; i = i + k)
                    {
                        intTemp = intArray[i - 1];
                        j = i;
                        while (j > k && intArray[j - k - 1] > intTemp)
                        {
                            intArray[j - 1] = intArray[j - k - 1];
                            j = j - k;
                        }
                        intArray[j - 1] = intTemp;
                    }

                    //减少步长
                    k = (k - 1) / 3;
                }
            }

    代码下载  希尔排序代码

  • 相关阅读:
    Jupsh_flutter Android 收不到消息 / 排查不出请根据第 9 点说明提供信息
    angular表单 Dom获取表单值以及双向数据绑定
    angular中的组件以及组件中的模板合成
    Flutter开发的app进行设备判断是Ios还是android
    Java的封装
    GCD编程 之 略微提高篇
    多线程基础(六)GCD基础
    我遇到的CocoaPods的问题(也许后期会解决,持续更新)
    iOS之通过PaintCode快速实现交互动画的最方便方法 未解问题
    多线程基础(五)NSThread线程通信
  • 原文地址:https://www.cnblogs.com/eugenewu0808/p/DO5.html
Copyright © 2011-2022 走看看