基于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 相关文章推荐
js中eval详解
Mar 30 Javascript
js禁止回车提交表单的示例代码
Dec 23 Javascript
Javascript基础知识(二)事件
Sep 29 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
学习JavaScript设计模式之迭代器模式
Jan 19 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
Jun 17 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
Vue.js中组件中的slot实例详解
Jul 17 Javascript
微信小程序自定义组件components(代码详解)
Oct 21 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连接Oracle for NT 远程数据库
2006/10/09 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
jQuery之按钮组件的深入解析
2013/06/19 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
Python中除法使用的注意事项
2014/08/21 Python
Python文件和流(实例讲解)
2017/09/12 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python之列表推导式的用法
2019/11/29 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
大学生找工作推荐信范文
2013/11/28 职场文书
中学生评语大全
2014/04/18 职场文书
保护环境倡议书300字
2014/05/19 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2019销售早会主持词
2019/06/27 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL