基于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使用prototype定义对象类型(转)[
Dec 22 Javascript
javascript AOP 实现ajax回调函数使用比较方便
Nov 20 Javascript
JQuery表格内容过滤的实现方法
Jul 05 Javascript
javascript日期格式化示例分享
Mar 05 Javascript
Javascript中的apply()方法浅析
Mar 15 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
node.js实现爬虫教程
Aug 25 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
Dec 13 Javascript
vue 解决异步数据更新问题
Oct 29 Javascript
vue-dplayer 视频播放器实例代码
Nov 08 Javascript
浅谈vue的第一个commit分析
Jun 08 Javascript
浅析JavaScript中的变量提升
Jun 01 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
一个数据采集类
2007/02/14 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
js计数器代码
2006/11/04 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
Python小进度条显示代码
2019/03/05 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
python实现两个文件夹的同步
2019/08/29 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
python中JWT用户认证的实现
2020/05/18 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
英语专业毕业个人求职自荐信
2013/09/21 职场文书
工作决心书范文
2014/03/11 职场文书
培训讲师岗位职责
2014/04/13 职场文书
铁路安全反思材料
2014/12/24 职场文书