基于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 相关文章推荐
去掉gridPanel表头全选框的小例子
Jul 18 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
javascript实现随机显示星星特效
Jan 28 Javascript
JavaScript实现身份证验证代码
Feb 17 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 Javascript
select标签设置默认选中的选项方法
Mar 02 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
Vue组件基础用法详解
Feb 05 Javascript
二维码条形码生成的JavaScript脚本库
Jul 07 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
随时给自己贴的图片加文字的php水印
2007/03/16 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
js实现秒表计时器
2019/12/16 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
python如何实现异步调用函数执行
2019/07/08 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
美国时尚女装在线:Missguided
2016/12/03 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
就业协议书怎么填
2014/04/11 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
土建技术员岗位职责
2015/04/11 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫