基于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去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 Javascript
javascript从定义到执行 你不知道的那些事
Jan 04 Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 Javascript
详解基于webpack搭建react运行环境
Jun 01 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
快速了解vue-cli 3.0 新特性
Feb 28 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
简述JS控制台的使用
Jul 15 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
Vue的编码技巧与规范使用详解
Aug 28 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
Nov 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
简单的PHP缓存设计实现代码
2011/09/30 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
php将html转为图片的实现方法
2017/05/19 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
javascript常用对话框小集
2013/09/13 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
python中set常用操作汇总
2016/06/30 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
python实现画圆功能
2018/01/25 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python3 读取Word文件方式
2020/02/13 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
我们是伦敦女孩:WalG
2018/01/08 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
中国梦口号
2014/06/13 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
出差报告怎么写
2014/11/06 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫
Oracle中日期的使用方法实例
2022/07/07 Oracle