基于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 tab标签页的制作
May 10 Javascript
jQuery获取页面元素绝对与相对位置的方法
Jun 10 Javascript
JS如何实现文本框随文本的长度而增长
Jul 30 Javascript
基于jQuery实现的美观星级评论打分组件代码
Oct 30 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
Javascript之BOM(window对象)详解
May 25 Javascript
JS作用域深度解析
Dec 29 Javascript
javascript实现下雨效果
Mar 27 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
Dec 07 Javascript
在vue中解决提示警告 for循环报错的方法
Sep 28 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 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中在PDO中使用事务(Transaction)
2011/05/14 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
php中的依赖注入实例详解
2019/08/14 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
python二叉树的实现实例
2013/11/21 Python
python 实现登录网页的操作方法
2018/05/11 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python中删除某个元素的方法解析
2019/11/05 Python
python3 xpath和requests应用详解
2020/03/06 Python
python math模块的基本使用教程
2021/01/16 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
上班玩手机检讨书
2014/02/17 职场文书
演讲稿格式范文
2014/05/19 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
村官个人总结范文
2015/03/03 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis
Java中的继承、多态以及封装
2022/04/11 Java/Android