基于JavaScript实现的希尔排序算法分析

 更新时间:2017年04月14日 10:23:49   作者:布瑞泽的童话  
这篇文章主要介绍了基于JavaScript实现的希尔排序算法,简单分析了希尔排序的原理并结合实例形式给出了javascript实现希尔排序的操作步骤与相关注意事项,需要的朋友可以参考下

本文实例讲述了基于JavaScript实现的希尔排序算法。分享给大家供大家参考,具体如下:

通过对直接插入排序的分析,可知其时间复杂度为O(n2),但是,如果待排序序列为正序时,其时间复杂度可提高至O(n)。希尔排序正是对此进行改进的排序。希尔排序的核心理念与插入排序不同,它会首先比较距离较远的元素,而非相邻元素。通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔

下图演示了希尔排序中间隔序列是如何运行的:

下面我们通过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>

其排序过程如下:

希尔排序根据间隔序列的选取不同,时间复杂度也不同,但是需要注意,应该使间隔序列中的值没有除1以外的公因子,并且最后一个间隔值必须等于1。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • 将CKfinder整合进CKEditor3.0的新方法

    将CKfinder整合进CKEditor3.0的新方法

    最新发布的CKFinder 1.4版 已经提供了对CKEditor3.0的支持
    2010-01-01
  • 分享一则javascript 调试技巧

    分享一则javascript 调试技巧

    这篇文章主要分享了一则javascript 调试技巧,需要的朋友可以参考下
    2015-01-01
  • 深入理解JSON数据源格式

    深入理解JSON数据源格式

    JSON 在很多场合下作为数据格式比XML要更加方便。JSON的数据由对象、数组和元素等格式组成。每种格式都可以包含合法的JavaScript数据类型
    2014-01-01
  • JavaScript对象的创建模式与继承模式示例讲解

    JavaScript对象的创建模式与继承模式示例讲解

    继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有的特性基础上进行扩展,增加功能,这样产生新的类,称作是派生类。继承呈现了面向对象程序设计的层析结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用
    2022-12-12
  • 利用Math.js解决JS计算小数精度丢失问题

    利用Math.js解决JS计算小数精度丢失问题

    电商系统中订单、库存中有数字等加减乘除算术,下面这篇文章主要给大家介绍了关于利用Math.js解决JS计算小数精度丢失问题的相关资料,mathjs是一个前端在计算上面必定会用到的类库,需要的朋友可以参考下
    2022-04-04
  • JavaScript监听触摸事件代码实例

    JavaScript监听触摸事件代码实例

    这篇文章主要介绍了JavaScript监听触摸事件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 微信小程序uploadFile接口实现文件上传

    微信小程序uploadFile接口实现文件上传

    这篇文章主要介绍了微信小程序uploadFile接口实现文件上传流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 前端中跨域及解决措施示例详解

    前端中跨域及解决措施示例详解

    这篇文章主要介绍了前端中跨域及解决措施的相关资料,主要方法包括JSONP、CORS和服务器代理跨域,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • ES6中的迭代器、Generator函数及Generator函数的异步操作方法

    ES6中的迭代器、Generator函数及Generator函数的异步操作方法

    这篇文章主要介绍了ES6中的迭代器、Generator函数以及Generator函数的异步操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • JavaScript 如何计算文本的行数的实现

    JavaScript 如何计算文本的行数的实现

    这篇文章主要介绍了JavaScript 如何计算文本的行数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论