码迷,mamicode.com
首页 > 其他好文 > 详细

排序算法学习之希尔排序

时间:2014-05-09 12:59:34      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

    直接插入排序对待排数量较少基本有序的序列,其执行效率是非常高的,希尔排序正是利用了这点,将一个无序的序列拆分成几个子组,然后对几个子组分别进行插入排序。

    注意,这儿的分组并不是简单的{a1,a2,a3,b1,b2,b3,c1,c2,c3}(相同字母为一组),而是进行{a1,b1,c1,a2,b2,c2,a3,b3,c3},因为我们一次分组排序的目的是将各个子组中较小的放到整个序列前面,较大的放到整个序列后面,以形成基本有序然后减少分组数量{a1,b1,a2,b2,a3,b3,a4,b4,a5},继续对每个子组进行插入排序,使序列更加基本有序,直到分组数量等于整个序列长度。

    在实际中,我们用增量increment逐渐减小表示分组数量逐渐减少,而且increment成倍减少, 于是可以写出以下代码:

bubuko.com,布布扣
void ShellSort (int n, int *array)
{
    int i, j;
    int increment;
    for (increment=n/3; increment > 0; increment /= 3)
    {
        for (i=0; i<increment; i++)        /*下面对一组序列进行插入排序*/
        {
            for (j=i+increment; j<n; j+=increment)
            {
                if (array[j] < array[j-increment])
                {
                    int key = array[j];
                    int k;
                    for (k=j-increment; k>=0 && array[k]>key; k -= increment)
                    {
                        array[k+increment] = array[k];
                    }
                    array[k+increment] = key;
                }
            }
        }
    }
}
bubuko.com,布布扣

 

排序算法学习之希尔排序,布布扣,bubuko.com

排序算法学习之希尔排序

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/lifan/p/3718455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!