JS 希尔排序完全理解
希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 9,然后再次分割更小的间隔对比,等到间隔为1时,就是两两对比,
代码实现:
function shell(arr = []) {
var length = arr.length,
gap = 1;
while (gap < length / 3) {
gap = gap * 3 + 1
}
while (gap >= 1) {
for (let i = 0; i < arr.length; i++) {
for (let j = i; j >= gap && arr[j] > arr[j - gap]; j -= gap) {
var temp = arr[j];
arr[j] = arr[j-gap]
arr[j-gap] = temp
}
}
gap = (gap - 1) / 3
}
return arr
}
console.log(
shell([1,4,5,8,9,5,6,15,20,7])
)
通常希尔排序的效率,与gap的值有关系,通过while循环动态设置间隔间隙来优化效率
JS 希尔排序完全理解的更多相关文章
- 希尔排序的理解和实现(Java)
希尔排序原理 希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的. 该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment ...
- js希尔排序
function shellSort (arr) { var len = arr.length; var increment = Math.floor(len/2); while(increment! ...
- Python排序算法——希尔排序(Shell’s Sort)
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10793487.html 一.希尔排序(Shel ...
- 希尔排序法及其js实现
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序.它是直接插入排序算法的加强版. 希尔增量: 希尔增量是指希尔提出了一种冲破二次时间屏障的算法. Donald Shell 提出了一种冲破二次 ...
- 使用 js 实现十大排序算法: 希尔排序
使用 js 实现十大排序算法: 希尔排序 希尔排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- JS快速排序 希尔排序 归并排序 选择排序
/* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...
- js排序算法06——希尔排序
希尔排序本质是一种插入排序,由一位叫希尔的大神提出得名,其基本思想是将数组分组进行插入排序,每次消除不止一个逆序对,这样就提高了插入排序的效率.最后一步进行一间隔的插入排序,此时数组已经基本有序.代码 ...
- 排序之希尔排序(JS)
希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该 ...
- js 实现排序算法 -- 希尔排序(Shell Sort)
原文: 十大经典排序算法(动图演示) 希尔排序 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之处在于,它会优先比较距离较远的元素.希尔排序又叫缩 ...
- JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
随机推荐
- Java-MVC开发模式
MVC开发模式 1. jsp演变历史 1. 早期只有Servlet,只能使用response输出标签数据,非常麻烦 2. 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大 ...
- oeasy教您玩转vim - 33 - # 查找文本
文字区块 回忆上节课内容 括号间跳转 成对括号间跳转 % 不成对括号间跳转 [( 跳转到上一个没配对的 ( [) 跳转到下一个没配对的 ) [{ 跳转到上一个没配对的 { [} 跳转到下一个没配对 ...
- Known框架实战演练——进销存数据结构
系统主要包含商品信息.商业伙伴(客户.供应商)信息.业务单表头信息.业务单表体信息.对账单表头信息.对账单表体信息. 1. 商品信息(JxGoods) 该表用于存储公司商品信息. 名称 代码 类型 长 ...
- 关于netty 一些使用细节
netty 的客户端通常是websoket 但是为了演示也可以用netty做客户端, Channel:可以被理解为数据传输的通道. Pipeline:可以被视为一个由多个工序组成的流水线,负责将数 ...
- 写写Redis十大类型GEO(地理空间)的常用命令
又是一个用于处理sql性能的类型,这个类型的核心思想就是把三维的地球变成二维的坐标,再将二维的坐标换成一维的点块,最后将一维的点块转化成base32编码 类型就是zset, 在shell的启动命令后加 ...
- 对比python学julia(第一章)--(第五节)八十天环游地球
5.1. 问题描述 <八十天环游地球>是法国作家儒勒·凡尔纳创作的一部长篇小说,讲述了这样一个神奇的故事. 在1872年的伦敦,英国绅士福格跟俱乐部的朋友以巨资打赌他能在80天实现环游地 ...
- SpringBoot全局异常处理及自定义异常
首先定义自定义返回类,如果自己项目中已经有了自定义返回类只需要将后面的代码做相应的修改即可: import io.swagger.annotations.ApiModelProperty; impor ...
- 【设计模式 Design Pattern】【UML】建模语言
什么是UML图? UML-Unified Modeling Language 统一建模语言,又称标准建模语言. 是用来对软件密集系统进行可视化建模的一种语言. UML的定义包括UML语义和UML表示法 ...
- 个人的谷歌学术主页:https://scholar.google.co.kr/citations?user=jHvm-VAAAAAJ&hl=en
主页地址: https://scholar.google.co.kr/citations?user=jHvm-VAAAAAJ&hl=en
- URDF使用语法【万字解析赶紧码住】 —— 机器人统一描述文件格式(Unified Robot Description Format)
原文地址: https://zhuanlan.zhihu.com/p/665269288 具体内容略,请参照原文.