希尔排序本质是一种插入排序,由一位叫希尔的大神提出得名,其基本思想是将数组分组进行插入排序,每次消除不止一个逆序对,这样就提高了插入排序的效率。最后一步进行一间隔的插入排序,此时数组已经基本有序。代码实现如下:

function shellSort(arr){if(!Array.isArray(arr)){return false;          //类型判断
    }    else{    var k = 1,len = arr.length,interval;while(Math.pow(2,k)<len){k++;}interval = Math.pow(2,k-1)-1;    //定义间隔while(interval>0){for (var i = interval; i < len; i++) {var cup = arr[i];var j = i-interval;while(j>=0&&arr[j]>cup){arr[j+interval] = arr[j];j-=interval;}arr[j+interval] = cup;};interval = (interval+1)/2-1;
        }return arr;}
}

增量用了Hibbart增量,Dk=2^k-1; 据猜想其平均时间复杂度Tavg = O(N5/4); 希尔排序不是稳定排序,其排序效率与所用的增量序列有关。

转载于:https://www.cnblogs.com/renbo/p/8432935.html

js排序算法06——希尔排序相关推荐

  1. JAVA排序算法之希尔排序

    基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...

  2. [算法]-排序算法之希尔排序

    希尔排序算法思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序 ...

  3. 排序算法:希尔排序算法实现及分析

    希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...

  4. C/C++排序算法(2)希尔排序

    常见排序算法总结(2)希尔排序 一篇文章,带你搞懂 希尔排序 (注:代码语言的选择不应该限制了我们对算法的理解) 文章附有动图!一看就懂! (1)工作原理 希尔排序,也称递减增量排序算法,是插入排序的 ...

  5. 排序算法之希尔排序(Java实现)

    希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...

  6. 排序算法(4)希尔排序

    排序算法(4)希尔排序 原理: 希尔排序也称缩小增量排序:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap ...

  7. php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识

    插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...

  8. 经典排序算法之希尔排序

    排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...

  9. 常见排序算法之希尔排序

    文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...

最新文章

  1. 线程同步之生产者-消费者问题
  2. Linux卸载搜狐,双系统删除教程详解:Windows(linux)双系统,教你如何删除其中一个!...
  3. 开启DELL Raid卡H730P缓存
  4. 【大话Hibernate】hibernate事务管理
  5. 1-14字串的连接最长路径查找
  6. 华为云公布2021产品上新计划,让云无处不在,让智能无所不及
  7. JMeter集合点功能的使用
  8. CentOS 7安装megacli
  9. 各大软件的 java版本_Java 各个版本的软件 1.4 1.5 5.0 6.0
  10. structs - 标签库(html)
  11. 深度学习入门之二阶段小demo练习(持续更新系列)
  12. Allegro PCB封装库(分类、命名很规范,已验证)
  13. MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)的模型实现一张新车牌照片字符预测
  14. centos8安装配置web服务器
  15. Oracle 10g的闪回机制
  16. va_start 用法
  17. 2021年中国非金属3D打印市场趋势报告、技术动态创新及2027年市场预测
  18. 通过Mycelipse,用Hibernate反向生成映射文件、Javabean等
  19. 【Linux】环境变量和命令行参数
  20. 天子呼来不上船,自称臣是酒中仙——我的嗜酒情节

热门文章

  1. linux的Ubuntu
  2. 命令行查看网卡使用的驱动+跳板机命令行设置静态地址
  3. kafka->Flink->ElasticSearch(Java形式)
  4. intellij连接真实spark集群运行wordcount-Java
  5. AttributeError: 'Polar AxesSubplot' object has no attribute 'set_axis_bgcolor'
  6. linux下面的chrome总是跳出xdg-open怎么办
  7. Running /usr/bin/wineserver -w. This will hang until all wine processes XXXX terminate
  8. 的原型是什么_学习服装原型是什么?
  9. php 工厂静态类,静态工厂模式(Static Factory)
  10. Yii 2.0高级版 下拉框预设值、默认值