小小飞鹰

     中国人缺少的是步骤,太急。练太极!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[练手5]希尔排序

Posted on 2008-11-25 11:03  小小飞鹰  阅读(260)  评论(0编辑  收藏  举报

目      标      用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;
            }
        }

代码下载  希尔排序代码