算法学习记录-希尔排序

原创 2015年11月20日 10:34:40

针对快速排序的优化,原理在快速排序前针对使数组内任意间隔为H的字数组是有序的,当H变化为1时直接为快速排序,大概的代码描述如下:

public class ShellSort {

    public static void sort(int[] a)
    {
        int N = a.length;
        int H = 1;
        while(H< 3/N)
        {
            H = 3*H+1;
        }
        
        while(H >= 1)
        {
            for (int i = H; i<N;i++) {
                for (int j = i; j > 0 && (a[j]<a[j-H]); j = j-H) {
                    swap(a[i], a[i-H]);
                }
            }
            H = H/3;
        }

    }

}

希尔排序的高效原因在于平衡了子数组的规模和有序性,希尔排序的时间复杂度与增量序列的选取有关,例如希尔增量时间复杂度为O(n²),而Hibbard增量的希尔排序的时间复杂度为O(

),希尔排序时间复杂度的下界是n*log2n。希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择。

算法效率取决于H 和H的变化因子,这个目前貌似没有定论,需要数学来论证。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法(第四版)学习笔记之java实现希尔排序

希尔排序思想:使数组中任意间隔为h的元素都是有序的。

算法导论学习补充——希尔排序

/** * 希尔排序思想:先将整个待排记录序列分割成若干子序列分别进行直接插入排序, * 待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序 * 希尔排序时间复杂度为O(n^3/...
  • FG2006
  • FG2006
  • 2011-08-12 01:25
  • 1102

一步步学习数据结构和算法之希尔排序效率分析及java实现

希尔排序效率分析及java实现: public class ShellSort {  /**   * 希尔排序原理:设置间隔变量,将数组进行分组,组内排序,然后缩小间隔变量,直至间隔变量为1(结束条...

C++、C#、java算法学习日记05----希尔排序(ShellSort)

希尔排序是插入式排序的一种,也称缩小增量排序,是对 直接插入排序  的一种更高效的改进算法, 基本思想:      希尔排序是把记录按下标的一定增量(也就是按一定的步长)分组,对每组使用直接插...
  • HC666
  • HC666
  • 2015-11-01 18:14
  • 732

算法学习笔记--希尔排序

希尔排序:这是一种基于插入排序的快速的排序算法。 这种排序的主要思想就是:使数组中任意间隔为h的元素都是有序的,这样的数组称为h有序数组。如下图,就是一个h有序数组(h=4): 实现希尔排序的方法...

希尔排序算法

算法学习之排序算法(四)(希尔排序)

希尔排序的基本思想是 把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。 随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记...

C#希尔排序算法

  • 2014-04-18 09:32
  • 15KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)