基于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 相关文章推荐
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
JS对象与JSON格式数据相互转换
Feb 20 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 Javascript
javascript实现按回车键切换焦点
Feb 09 Javascript
vue-resourse将json数据输出实例
Mar 08 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 jQuery
javaScript产生随机数的用法小结
Apr 21 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
Sep 05 Javascript
js的新生代垃圾回收知识点总结
Aug 22 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
Aug 04 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
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
限制文本字节数js代码
2007/03/06 Javascript
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
python的迭代器与生成器实例详解
2014/07/16 Python
python随机生成指定长度密码的方法
2015/04/04 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
简单易懂的python环境安装教程
2017/07/13 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
Python类中self参数用法详解
2020/02/13 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
python super()函数的基本使用
2020/09/10 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
渔夫的故事教学反思
2014/02/14 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
大学生就业自荐书
2014/06/16 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
天坛导游词
2015/02/02 职场文书
司机岗位职责
2015/02/04 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers