基于JavaScript实现的希尔排序算法分析


Posted in Javascript onApril 14, 2017

本文实例讲述了基于JavaScript实现的希尔排序算法。分享给大家供大家参考,具体如下:

通过对直接插入排序的分析,可知其时间复杂度为O(n2),但是,如果待排序序列为正序时,其时间复杂度可提高至O(n)。希尔排序正是对此进行改进的排序。希尔排序的核心理念与插入排序不同,它会首先比较距离较远的元素,而非相邻元素。通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔

下图演示了希尔排序中间隔序列是如何运行的:

基于JavaScript实现的希尔排序算法分析

下面我们通过js来实现希尔排序,代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript希尔排序</title>
</head>
<body>
<script type="text/javascript">
  function shellSort(nums){//希尔排序
    var gaps=[5,3,1];//定义间隔区间
    for(var g=0;g<gaps.length;g++){//一个一个间隔值开始
      for(var i=gaps[g];i<nums.length;i++){//以间隔值遍历
        var temp=nums[i];//选中元素
        for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
          nums[j]=nums[j-gaps[g]];//后移
        }
        nums[j]=temp;//填补
      }
    }
  }
  function show(nums){//显示数组
    for(var i=0;i<nums.length;i++){
      document.write(nums[i]+' ');
    }
    document.write('<br>');
  }
  var nums=[6,0,2,9,3,5,8,0,5,4];
  show(nums);//6 0 2 9 3 5 8 0 5 4
  shellSort(nums);//希尔排序
  show(nums);//0 0 2 3 4 5 5 6 8 9
</script>
</body>
</html>

其排序过程如下:

基于JavaScript实现的希尔排序算法分析

希尔排序根据间隔序列的选取不同,时间复杂度也不同,但是需要注意,应该使间隔序列中的值没有除1以外的公因子,并且最后一个间隔值必须等于1。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery中防刷IP流量软件影响统计的一点对策
Jul 10 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 Javascript
jquery原理以及学习技巧介绍
Nov 11 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
jQuery多文件异步上传带进度条实例代码
Aug 16 Javascript
jquery操作select取值赋值与设置选中实例
Feb 28 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
May 05 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 Javascript
vue页面跳转实现页面缓存操作
Jul 22 Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 #Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 #Javascript
JavaScript Canvas绘制圆形时钟效果
Aug 20 #Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 #Javascript
基于JavaScript实现的折半查找算法示例
Apr 14 #Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 #Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 #Javascript
You might like
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
CI框架常用函数封装实例
2016/11/21 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
如何在PHP中使用数组
2020/06/09 PHP
javascript dom 基本操作小结
2010/04/11 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
python找出完数的方法
2018/11/12 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
python对于requests的封装方法详解
2019/01/03 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
行政文秘岗位职责范本
2014/02/10 职场文书
拓展训练激励口号
2014/06/17 职场文书
一份文言文检讨书
2014/09/13 职场文书
工程催款通知书
2015/04/17 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android