首页 > 其他 > 详细

排序算法学习之希尔排序

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

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

    注意,这儿的分组并不是简单的{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

排序算法学习之希尔排序

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!