基于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 相关文章推荐
Javascript 同时提交多个Web表单的方法
Feb 19 Javascript
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
JS 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
详解Angularjs中的依赖注入
Mar 11 Javascript
JavaScript数组复制详解
Feb 02 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
JS可断点续传文件上传实现代码解析
Jul 30 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
html下载本地
2006/06/19 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
SVG实现时钟效果
2018/07/17 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
详解Python中的from..import绝对导入语句
2016/06/21 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python cs架构实现简单文件传输
2020/03/20 Python
浅述python中深浅拷贝原理
2018/09/18 Python
python实现汉诺塔算法
2021/03/01 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
2014年优质护理服务工作总结
2014/11/14 职场文书
护士个人年终总结
2015/02/13 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书