插入排序---希尔插入排序算法(Javascript版)

取一个小于n的整数作为第一个增量,把序列分组。所有距离为增量的倍数的元素放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1,即所有元素放在同一组中进行直接插入排序为止。

 

一般的初次取序列的一半为增量,以后每次减半,直到增量为1。

 

以下代码在nodejs中执行通过。

function shellInsertSort(elements, di){//从增量的所在位置开始for(var i = di; i < elements.length; i++){//升序if(elements[i] < elements[i-di]){//取出增量位置的元素作为被插入元素(哨兵)var guard = elements[i];var j = i - di;elements[i] = elements[j];//向前,将增量的倍数的位置作为同一组比较及进行直接插入法while(j >= 0 && guard < elements[j]){elements[j+di] = elements[j];j -= di;}//插入elements[j + di] = guard;}}
}function shellSort(elements){//增量为序列的一半var di = parseInt(elements.length / 2);while(di >= 1){shellInsertSort(elements, di);//每次减半,最后增量必须为1di = parseInt(di / 2);}
}var elements = [10, 9, 8, 7, 6, 5];
console.log('before: ' + elements);
shellSort(elements);
console.log(' after: ' + elements);

 

效率:比直接插入法快。但不是一种稳定的排序算法,关键取决于增量的选择,初次通常选取序列长度的一半。

(转帖):希尔排序时间复杂度的下界是n*log2n。希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择。但是比O(n^2)复杂度的算法快得多。并且希尔排序非常容易实现,算法代码短而简单。 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差。专家们提倡,几乎任何排序工作在开始时都可以用希尔排序,若在实际使用中证明它不够快,再改成快速排序这样更高级的排序算法. 本质上讲,希尔排序算法是直接插入排序算法的一种改进,减少了其复制的次数,速度要快很多。 原因是,当n值很大时数据项每一趟排序需要的个数很少,但数据项的距离很长。当n值减小时每一趟需要和动的数据增多,此时已经接近于它们排序后的最终位置。 正是这两种情况的结合才使希尔排序效率比插入排序高很多。
在希尔排序开始时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“视频编码”的相关概念

以下内容源于网络资源的整理&#xff0c;如有侵权请告知删除。 1、视频编码是什么意思&#xff1f; 视频编码&#xff0c;就是指通过特定的压缩技术&#xff0c;将某个视频格式的文件转换成另一种视频格式文件。 &#xff08;能否这样理解&#xff0c;视频编码&#xff0c;约…

常量和字段

常量是一个特殊的符号&#xff0c;它有一个从不变化的值。定义常量符号时&#xff0c;它的值必须能在编译时确定。确定之后&#xff0c;编译器将常量的值保存到程序集的元数据中。这意味着只能为编译器认定的基元类型定义常量。在C#中一下类型都是基元类型&#xff0c;可用于定…

简单实用的二级树形菜单hovertree

原创 hovertree是一个仿京东的树形菜单jquery插件&#xff0c;暂时有银色和绿色两种。官方网址&#xff1a;http://keleyi.com/jq/hovertree/欢迎下载使用查看绿色效果&#xff1a;http://keleyi.com/jq/hovertree/hovertreegreen.htm可以设置菜单宽度(width)&#xff0c;还可以…

分析根文件系统中的目录结构

以下内容源于网络资源的整理&#xff0c;如有侵权请告知删除。 我们利用Busybox制作根文件系统&#xff0c;就是为了创建下面的这些目录和各文件。其中有些目录和文件不是构建最小根文件系统所必需的&#xff0c;有些却是必需的。 1、/linuxrc文件 这是最重要的文件&#xff0c…

xp系统一直跳出宽带连接服务器,XP系统网络问题解决方案

XP系统网络问题解决方案随着国内 Internet 的普及和信息产业的深化&#xff0c;近几年宽带网络的发展尤为迅速。下面是小编整理的一些生活上Windows XP网络故障的解决方案&#xff0c;希望对你有帮助!故障1&#xff1a;本地连接受限制或无连接很多用户发现&#xff0c;当每次进…

装逼的翻译,害死多少人,你同意吗?到底什么是非终止状态,终止状态

http://msdn.microsoft.com/zh-cn/library/system.threading.autoresetevent.aspx http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx 很久以前对这段翻译就很不爽了&#xff0c;为啥一直都要把non-signaled的翻译成“非终止状态”&#xff0c;为…

SQL Server 错误18456

第一步、 错误发生的场景 第二步、 找到引起错误的原因 第1步、 查看windows日志文件。 运行中输入 eventvwr (event viewer)打开日志文件查看器, 第三步、 解决方案&#xff0c;由第二步我们可以看出是SQL Server的认证模式引起了问题&#xff0c;所以只要把它改一下就可以…

数组面试

1.数组求和 如果只是普通求和会简单&#xff0c;但是只能使用一行代码该怎么办呢&#xff1f; int sum(int *a,int n) {return n 0 ? 0 : sum(a,n-1) a[n-1]; }2.寻找发帖水王 int Find(int *a,int n) {int times 0;int value;for (int i 0;i < n;i){if (times 0){val…

分析根文件系统中的etc/init.d/rcS文件

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、文件简介 &#xff08;1&#xff09;由博文分析根文件系统中的/etc/inittab文件可知&#xff0c;etc/inittab文件的第一行配置项一般是“::sysinit:/etc/init.d/rcS”&#xff0c;这说明控制台…

拼多多显示内部服务器错误是怎么回事,拼多多提现出现错误怎么办?拼多多提现常见问题...

拼多多提现是每个店家都会去操作的&#xff0c;不过提现时总会遇到很多问题&#xff0c;例如手机号码换了收不到验证码、提现资金到账时间、提现出现错误等等&#xff0c;当然还有很多。当这些问题出现时我们应该如何去解决呢?1、如果出现银行提现手机号非现使用手机号&#x…

分析根文件系统中的用户登录(主要涉及/etc/profile、/etc/intttab、/etc/passwd和/etc/shadow等文件)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、简单分析/etc/profile文件 1、何时被调用 这个文件直接或者间接地被/linuxrc文件调用。 2、文件简介 &#xff08;1&#xff09;busybox源码中的/examples/bootfloopy/etc/profile文件内容过于简…

VirtualBox 扩展虚拟硬盘容量

为什么80%的码农都做不了架构师&#xff1f;>>> 扩展步骤&#xff1a;第一步&#xff1a;修改硬盘镜像文件 1、虚拟机关机. 2、确认虚拟机使用文件(后缀为.vdi的文件)路径不带中文字符&#xff0e; 3、Windows 下按&#xff1a;Windows R&#xff0c;调出命令行工具…

jquery控制css的display(控制元素的显示与隐藏)

使用jquery控制div的显示与隐藏: $("#div的id").show()表示display:block, $("#div的id").hide()表示display:none; $("#id").toggle()切换元素的可见状态&#xff1a;如果元素是可见的&#xff0c;切换为隐藏的&#xff1b;如果元素是隐藏的&am…

制作ext2格式的根文件系统镜像

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、首先验证文件夹形式的rootfs是否可用 设置bootargs为nfs启动方式&#xff0c;然后使用在ubuntu中做好的文件夹形式的rootfs来启动&#xff0c;查看启动效果&#xff0c;作为将来用ext2格式的root…

技术和赚钱真的冲突吗?

前几天在微信上看到篇文章&#xff0c;讲述的是大悲寺和少林寺的对比。原文的大意是大悲寺如何如何清苦&#xff0c;烧香不许客户投钱。而少林寺如何的肥头大耳&#xff0c;尤其是方丈释永信是多么多么的会“敛财“。&#xff08;注意&#xff1a;我们这里抛去一些“确实是敛财…

构造和运行模块

作者&#xff1a;蔡伦辉写在前面作者一直支持GPL的精神。允许任何人自由使用、转载、复制和再分发&#xff0c;但必须保留作者署名&#xff0c;必须保证全文完整转载&#xff0c;包括完整的版权声明。由于作者水平有限&#xff0c;因此不能保证文章内容准确无误&#xff0c;请批…

分析与构建根文件系统中的/lib目录

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 由根文件系统的目录结构_天糊土的博客-CSDN博客可知&#xff0c;/lib目录在根文件系统中也是不能省略的。该目录存放着操作系统中的动态和静态链接库文件。我们构建/lib目录&#xff0c;主要工作是是…

优化小技巧——复杂属性对象的read模式

本帖最后由 Aone 于 2013-7-27 12:23 编辑想必Rectangle或者Point这样的数据类在我们的程序中特别是当前的游戏中是非常常用的类型。那么一些类中获取这些属性的时候为了封装&#xff0c;往往会写一个get函数return一个复制的Rectangle对象给外部。目的是为了防止被获取内部rec…

从零开始构建根文件系统

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 Uboot和系统移植&#xff08;19&#xff09;------- 根文件系统构建过程详解_big__C的博客-CSDN博客 一、总结 &#xff08;1&#xff09;本节在前面的理论分析的基础上&#xff0c;我们开始从零开…