基于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实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
vue实现百度搜索功能
Dec 28 Javascript
解决在Vue中使用axios用form表单出现的问题
Oct 30 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
详细分析vue响应式原理
Jun 22 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 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文件上传类
2016/08/29 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
python实现石头剪刀布小游戏
2021/01/20 Python
对Python实现累加函数的方法详解
2019/01/23 Python
python中的数据结构比较
2019/05/13 Python
Python flask框架post接口调用示例
2019/07/03 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
生产主管岗位职责
2013/11/10 职场文书
大学军训感言300字
2014/03/09 职场文书
黄金搭档广告词
2014/03/21 职场文书
应届生自荐书
2014/06/23 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
2015年档案管理工作总结
2015/04/08 职场文书