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;
                }
            }

    代码下载  希尔排序代码

  • 相关阅读:
    DFS 之 全排列
    蓝桥杯: 标题:第几个幸运数
    第K个幸运数字(4、7)
    C++将十进制数转化为二进制
    C++中数组声名后不初始化,数组里的值都是0吗?
    html和jsp区别
    中缀表达式转换为后缀表达式
    多个Activity之间共享数据的方式
    Jupyter Notebook入门教程
    Android之Activity生命周期详解
  • 原文地址:https://www.cnblogs.com/eugenewu0808/p/DO5.html
Copyright © 2011-2022 走看看