zoukankan      html  css  js  c++  java
  • 排序算法学习之希尔排序

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

        注意,这儿的分组并不是简单的{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成倍减少, 于是可以写出以下代码:

    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;
                    }
                }
            }
        }
    }
  • 相关阅读:
    APP专项测试方法有哪些?
    软件测试基础知识
    软件测试入门随笔——软件测试基础知识
    如何做接口测试
    App测试页面滑动
    什么是接口测试
    自动化测试
    测试用例设计方法
    Monkey测试手机BUG重现及解决方法
    软件测试工程师需要具备哪些数据库知识
  • 原文地址:https://www.cnblogs.com/lifan/p/3718455.html
Copyright © 2011-2022 走看看