基于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 相关文章推荐
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 Javascript
JavaScript中的函数声明和函数表达式区别浅析
Mar 27 Javascript
JavaScript中创建字典对象(dictionary)实例
Mar 31 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
Sep 20 Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
vue实现Input输入框模糊查询方法
Jan 29 Javascript
ES6中Promise的使用方法实例总结
Feb 18 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学习之简单计算器实现代码
2011/06/09 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php操作access数据库的方法详解
2017/02/22 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
python下MySQLdb用法实例分析
2015/06/08 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Linux下python制作名片示例
2018/07/20 Python
python函数的作用域及关键字详解
2019/08/20 Python
python SocketServer源码深入解读
2019/09/17 Python
python zip()函数使用方法解析
2019/10/31 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
食堂个人先进事迹
2014/01/22 职场文书
教研活动总结
2014/04/28 职场文书
python内置进制转换函数的操作
2021/06/02 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技