JavaScript排序算法之希尔排序的2个实例


Posted in Javascript onApril 04, 2014

插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率。
但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位。
希尔排序按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布。一些老版本教科书和参考手册把该算法命名为Shell-Metzner,即包含Marlene Metzner Norton的名字,但是根据Metzner本人的说法,“我没有为这种算法做任何事,我的名字不应该出现在算法的名字中。”

JavaScript排序算法之希尔排序的2个实例

希尔排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 < d1重复上述的分组和排序,直至所取的增量dt=1(dt < dt-l< … < d2 < d1),即所有记录放在同一组中进行直接插入排序为止。

该方法实质上是一种分组插入方法。

实例1:

/**
 * 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
 *
 * 希尔排序是基于插入排序的以下两点性质而提出改进方法的:
 *
 * 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
 * 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位
 *
 */function shellSort( list ) {
    var gap = Math.floor( list.length / 2 );
    while( gap > 0 ) {
        for( i = gap; i < list.length; i++ ) {
            temp = list[i];
            for( j = i; j >= gap && list[j - gap] > temp; j -= gap ) {
                list[j] = list[j - gap];
            }
            list[j] = temp;
        }
        gap = Math.floor( gap / 2 );
    }
    return list;
};
// test
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
shellSort(arr);

实例2:

<script type="text/javascript">
//document.write("----------希尔排序,插入排序的升级,1959年shell搞出来的------当增量取的正确时,时间复杂度为n的1.3次方-------");
//document.write("<br /><br />")
//var array = new Array(12, 25, 32, 16, 18, 27, 59, 69, 36);
function shellSort(array) {
 var j, i, v, h=1, s=3, k,n = array.length;
 var result = "";
 var count = 0;
    while(h < n)
  h=s*h+1; while(h > 1) {
  h=(h-1)/s;
       for (k=0; k<h; k++)
   for (i=k+h,j=i; i<n; i+=h, j=i) {
            v=array[i];
    while(true)
     if ((j-=h) >= 0 && array[j] > v)
      array[j+h]=array[j];
     else
      break;
    array[j+h]=v;
         }
   count++;
   result += "<br />第" + count + "遍排序的结果是:";
         for (var n = 0; n < array.length; n++) {
            result += array[n] + ",";
          }
 }
 return result;
}
//shallSort(array);
//document.write("<br /><br />");
</script>
Javascript 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
May 05 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
微信小程序scroll-view实现字幕滚动
Jul 14 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
javascript判断一个变量是数组还是对象
Apr 10 Javascript
深入浅析Vue 中 ref 的使用
Apr 29 Javascript
Node.js API详解之 util模块用法实例分析
May 09 Javascript
JavaScript中的prototype.bind()方法介绍
Apr 04 #Javascript
jQuery使用ajaxSubmit()提交表单示例
Apr 04 #Javascript
深入理解javascript的执行顺序
Apr 04 #Javascript
iframe窗口高度自适应的又一个巧妙实现思路
Apr 04 #Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
Apr 04 #Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
Apr 04 #Javascript
javascript中的循环语句for语句深入理解
Apr 04 #Javascript
You might like
聊天室php&amp;mysql(五)
2006/10/09 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python Django批量导入不重复数据
2016/03/25 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
什么时候用assert
2015/05/08 面试题
销售经理工作职责
2014/02/03 职场文书
促销活动方案模板
2014/02/24 职场文书
经济担保书范文
2014/04/02 职场文书
2014年财政所工作总结
2014/11/22 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android