算法学习记录-希尔排序

原创 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的变化因子,这个目前貌似没有定论,需要数学来论证。


推荐系统的学习笔记

一直以来对推荐系统的学习和理解来自一些机器学习书中简单介绍(如《集体智慧编程》和《机器学习实战》)和自己网上搜的一些资料。而当被问及对推荐系统的改进和理解,发现自己对推荐系统所知甚少,除了知道几个常用...
  • whiterbear
  • whiterbear
  • 2016年05月02日 10:10
  • 3782

记录生活,记录学习----我的2016

过着2017年的日子,思考着2016年人生的变化,或许,最大的变化是懂得记录学习,记录生活吧。2016年,博客进入了我的生活,从年初的寥寥数篇博客,到现在CSDN积累了200多篇,也许是因为「过于勤奋...
  • terence1212
  • terence1212
  • 2017年01月08日 16:11
  • 1892

我的参考文章&学习记录

Ubuntu手动设置DSL宽带连接:http://www.linuxidc.com/Linux/2015-07/119774.htm
  • iamanda
  • iamanda
  • 2016年12月27日 17:23
  • 260

学习记录(一)

1. R是一个非常灵活的平台,是专用于探索、展示和理解数据的语言。 2. 以数据科学家的角度学习R,思考如何才能成功地处理、分析和理解数据,包括: * 获取数据(从各种数据源将数据导入程序); *...
  • zhuanzhu123
  • zhuanzhu123
  • 2013年10月29日 16:12
  • 905

ftp sftp 学习记录

[+] Sftp和ftp over ssh2的区别 最近使用SecureFx,涉及了两个不同的安全文件传输协议: -sftp -ftp over SSH2 这两种协议...
  • pzqingchong
  • pzqingchong
  • 2017年06月24日 19:16
  • 463

关于单元测试的学习记录

关于项目单元测试学习总结
  • u014378902
  • u014378902
  • 2016年05月05日 23:12
  • 320

QT学习点滴记录(二)

示例名称:QtCreator添加菜单图标 1. x
  • wtf19900910
  • wtf19900910
  • 2014年09月19日 10:53
  • 294

[JavaWEB]Rest学习记录——Jersey学习(2)

创建自己的JerseyWebServicePOST 实现  version : jersey-quickstart-webapp 2.23run on server : 地址栏http://loc...
  • qq_30043465
  • qq_30043465
  • 2017年02月25日 01:28
  • 140

分块算法学习记录

分块算法其实很神奇,就是把一个数列划分为sqrtN块,然后暴力就会得到意想不到的速度。 HNOI 2010 BZOJ 2002 弹飞绵羊 其实分块的真的没什么可讲的code: #include ...
  • Lcomyn
  • Lcomyn
  • 2015年03月29日 20:31
  • 458

学习记录——Boosting算法

Boosting算法 Boosting的基本思想很简单,就是"三个臭皮匠顶个诸葛亮"。将若干个弱分类器(base Learner)组合起来,变成一个强分类器。 Adaboost算法及分析 199...
  • Try_my_best51540
  • Try_my_best51540
  • 2017年03月13日 17:50
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法学习记录-希尔排序
举报原因:
原因补充:

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