基于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之Document元素选择器篇
Aug 14 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 Javascript
概述VUE2.0不可忽视的很多变化
Sep 25 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
Dec 17 Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
elementUI select组件默认选中效果实现的方法
Mar 25 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 Javascript
实现AJAX异步调用和局部刷新的基本步骤
Mar 17 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版自动生成文章摘要
2008/07/23 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
在视频前插入广告
2006/11/20 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
python常见数制转换实例分析
2015/05/09 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
django 环境变量配置过程详解
2019/08/06 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
如何写求职信
2014/05/24 职场文书
意向协议书
2015/01/27 职场文书
毕业生学校组织意见
2015/06/04 职场文书
学校标语口号大全
2015/12/26 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL