基于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代码格式化和语法着色V2
Oct 14 Javascript
基于jquery的一个简单的脚本验证插件
Apr 05 Javascript
JavaScript表达式:URL 协议介绍
Mar 10 Javascript
自己写的Javascript计算时间差函数
Oct 28 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 Javascript
vue中appear的用法
Aug 17 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
ES2020 已定稿,真实场景案例分析
May 25 Javascript
js实现盒子拖拽动画效果
Aug 09 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
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
PHP URL路由类实例
2013/11/12 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
js的写法基础分析
2011/01/17 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
微信小程序自定义组件
2017/08/16 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
经济管理专业自荐信
2013/12/30 职场文书
竞争上岗实施方案
2014/03/21 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
在Python 中将类对象序列化为JSON
2022/04/06 Python
Python使用DFA算法过滤内容敏感词
2022/04/22 Python