插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率。

但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位。

希尔排序按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布。一些老版本教科书和参考手册把该算法命名为Shell-Metzner,即包含Marlene Metzner Norton的名字,但是根据Metzner本人的说法,“我没有为这种算法做任何事,我的名字不应该出现在算法的名字中。”

希尔排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 < d1重复上述的分组和排序,直至所取的增量dt=1(dt < dt-l< … < d2 < d1),即所有记录放在同一组中进行直接插入排序为止。

该方法实质上是一种分组插入方法。

实例1:

/**

* 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

*

* 希尔排序是基于插入排序的以下两点性质而提出改进方法的:

*

* 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率

* 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位

*

*/

function shellSort( list ) {

var gap = Math.floor( list.length / 2 );

while( gap > 0 ) {

for( i = gap; i < list.length; i++ ) {

temp = list[i];

for( j = i; j >= gap && list[j - gap] > temp; j -= gap ) {

list[j] = list[j - gap];

}

list[j] = temp;

}

gap = Math.floor( gap / 2 );

}

return list;

};

// test

var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];

shellSort(arr);

实例2:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识相关推荐

  1. 《大话数据结构》第9章 排序 9.6 希尔排序(下)

    9.6.3 希尔排序算法         好了,为了能够真正弄明白希尔排序的算法,我们还是老办法--模拟计算机在执行算法时的步骤还研究算法到底是如何进行排序的.         希尔排序算法代码如下. ...

  2. 12. 希尔排序,以及希尔排序的优化

    1. 什么是希尔排序 希尔排序(Shell's Sort)是插入排序的一种又称"缩小增量排序"(Diminishing Increment Sort),是直接插入排序算法的一种更高 ...

  3. JavaScript 中Proxy(代理)和Reflect(反射)基础知识

    JavaScript 中Proxy(代理)和Reflect(反射)基础知识   最近在Vue3项目开发中,我们经常使用与Proxy和Reflect相关的函数.这些函数以各种形式出现在Vue3 Reac ...

  4. 数据结构与算法笔记(九)—— 希尔排序

    什么是希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 该方法因DL.Shell于1959年提出而得名 ...

  5. 常见排序算法2–直接插入法vs希尔排序法

    常见排序算法–直接插入法vs希尔排序法 首先,我们通过一个例子来了解直接插入算法 例如,对原始数组{15,24,3,49,10}进行直接插入排序(由小到大进行排序) 第一个数15无法比较,第二个数24 ...

  6. matlab实现希尔排序,C语言希尔排序算法

    用希尔排序法对一组数据由小到大进行排序,数据分别为 69.56.12.136.3.55.46. 99.88.25. 实现过程: (1)自定义函数 shsort(),实现希尔排序. (2) main() ...

  7. 算法导论/第一部分_基础知识

    算法导论: 基础知识 Chapter 1 算法在计算中的作用 1.1 算法 1.2 作为技术的算法 Chapter 2 算法基础 2.1 插入排序 练习: 2.2 分析算法 插入算法的分析 增长量级 ...

  8. F - 数据结构实验之排序六:希尔排序

    Description 我们已经学习了各种排序方法,知道在不同的情况下要选择不同的排序算法,以期达到最好的排序效率:对于待排序数据来说,若数据基本有序且记录较少时, 直接插入排序的效率是非常好的,希尔 ...

  9. 《大话数据结构》第9章 排序 9.6 希尔排序(上)

    9.6.1 变不可能为可能 给大家出一道智力题.请问"VII"是什么?         嗯,很好,它是罗马数字的7.现在我们要给它加上一笔,让它变成8(VIII),应该是非常简单, ...

最新文章

  1. 汇智清华,医道生机 | 第四届清华校友三创大赛医疗健康行业论坛圆满召开
  2. SSI——服务器端嵌入
  3. 挂牌一年,关于 5G 的 9 个变化
  4. SAP Spartacus取语言设置的入口程序
  5. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金
  6. Linux 命令之 iwconfig 命令-配置无线网络接口
  7. 破解静态WEP KEY全过程
  8. Java核心类笔记(字符串方法、StringBuilder(Joiner)、包装、JavaBean、枚举、Math、随机数)
  9. 《Java程序设计》第4周学习总结
  10. 如何检测mysql语法的手册_您的SQL语法有错误;查看与MySQL对应的手册
  11. 编译原理-FIRST表-FOLLOW表-LL1表(含python代码)
  12. Debian Gnu/Linux8.5安装GOLANG环境笔记
  13. 《计算机组成原理》(微课版) 第1章 计算机系统概述
  14. 推荐软件——total commander(善用佳软)
  15. cad字体安装_1.1.2 CAD篇之字体库设置
  16. 曾宪武《物联网通信技术》课后答案(四)
  17. 美团外卖红包,商超生鲜红包,饿了么红包天天领,果蔬抢特价,大额满减券,返利优惠券源代码
  18. Android自定义实现点赞效果!
  19. [附源码]java毕业设计社区生鲜电商平台
  20. JavaScript-节点操作

热门文章

  1. 百度移动关键词排名查询API接口-(api_submit- 百度移动关键词排名查询API接口)
  2. Number(数字)
  3. ue4 流送关卡使用注意
  4. 互联网创业需要具备的五大能力
  5. 微信sdk上传录音php,HTML5实现微信jssdk录音播放语音的实例
  6. 深入浅出kafka原理-1-初识只作乍见之欢
  7. autojs解除对部分app限制
  8. archlinux系统美化及实用软件
  9. sersync+rsync实现数据文件实时同步
  10. ACRA功能介绍与分析