js排序算法06——希尔排序
希尔排序本质是一种插入排序,由一位叫希尔的大神提出得名,其基本思想是将数组分组进行插入排序,每次消除不止一个逆序对,这样就提高了插入排序的效率。最后一步进行一间隔的插入排序,此时数组已经基本有序。代码实现如下:
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——希尔排序相关推荐
- JAVA排序算法之希尔排序
基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...
- [算法]-排序算法之希尔排序
希尔排序算法思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序 ...
- 排序算法:希尔排序算法实现及分析
希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...
- C/C++排序算法(2)希尔排序
常见排序算法总结(2)希尔排序 一篇文章,带你搞懂 希尔排序 (注:代码语言的选择不应该限制了我们对算法的理解) 文章附有动图!一看就懂! (1)工作原理 希尔排序,也称递减增量排序算法,是插入排序的 ...
- 排序算法之希尔排序(Java实现)
希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...
- 排序算法(4)希尔排序
排序算法(4)希尔排序 原理: 希尔排序也称缩小增量排序:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap ...
- php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...
- 经典排序算法之希尔排序
排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...
- 常见排序算法之希尔排序
文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...
最新文章
- 线程同步之生产者-消费者问题
- Linux卸载搜狐,双系统删除教程详解:Windows(linux)双系统,教你如何删除其中一个!...
- 开启DELL Raid卡H730P缓存
- 【大话Hibernate】hibernate事务管理
- 1-14字串的连接最长路径查找
- 华为云公布2021产品上新计划,让云无处不在,让智能无所不及
- JMeter集合点功能的使用
- CentOS 7安装megacli
- 各大软件的 java版本_Java 各个版本的软件 1.4 1.5 5.0 6.0
- structs - 标签库(html)
- 深度学习入门之二阶段小demo练习(持续更新系列)
- Allegro PCB封装库(分类、命名很规范,已验证)
- MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)的模型实现一张新车牌照片字符预测
- centos8安装配置web服务器
- Oracle 10g的闪回机制
- va_start 用法
- 2021年中国非金属3D打印市场趋势报告、技术动态创新及2027年市场预测
- 通过Mycelipse,用Hibernate反向生成映射文件、Javabean等
- 【Linux】环境变量和命令行参数
- 天子呼来不上船,自称臣是酒中仙——我的嗜酒情节
热门文章
- linux的Ubuntu
- 命令行查看网卡使用的驱动+跳板机命令行设置静态地址
- kafka->Flink->ElasticSearch(Java形式)
- intellij连接真实spark集群运行wordcount-Java
- AttributeError: 'Polar AxesSubplot' object has no attribute 'set_axis_bgcolor'
- linux下面的chrome总是跳出xdg-open怎么办
- Running /usr/bin/wineserver -w. This will hang until all wine processes XXXX terminate
- 的原型是什么_学习服装原型是什么?
- php 工厂静态类,静态工厂模式(Static Factory)
- Yii 2.0高级版 下拉框预设值、默认值