【JavaScript算法】---希尔排序(转载自我的老师 Alley-巷子)
时间:2019-08-31
本文章向大家介绍【JavaScript算法】---希尔排序(转载自我的老师 Alley-巷子),主要包括【JavaScript算法】---希尔排序(转载自我的老师 Alley-巷子)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、什么是希尔排序
希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。
思路:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止
逻辑:
在希尔排序中最重要的是分组,我们先找到一个间隔,每隔一定的间隔将这些数字排位一组,
假设有这样一个数组 [9,1,2,5,7,4,8,6,3,5] ;我们每隔5个为一组。那么这个数组被我们分成了以下几组
第一组:9 4
第二组:1 8
第三组:2 6
第四组:5 3
第五组:7 5
分组完毕后我们在每隔组的组内进行排序
第一组: 4 9
第二组:1 8
第三组 2 6
第四组 3 5
第五组 5 7
排序后我们在将这个数组重新设间隔重新进行排序(下一次的间隔减半) 2个为一组
[4,1,2,3,5,9,8,6,5,7]
第一组:4 2 5 8 5 ==》组内排序 2 4 5 5 8
第二组:1 3 9 6 7 ==》组内排序 1 3 6 7 9
2 1 4 3 5 6 5 7 8 9
排序后我们在将这个数组重新设间隔重新进行排序(下一次的间隔减半) 1个为一组最后一次也就是两两比较
1 2 3 4 5 5 6 7 8 9
注意:间隔在希尔排序中一般是没有特别的规定,通常情况下是数组长度的一半
二、代码
var arr = [2,5,1,9,0] //算间隔 var len = Math.floor(arr.length/2) while(len>0){ for(var i=len;i<arr.length;i++){ var temp = arr[i]; for(var j=i-len;j>=0&&temp<arr[j];j=j-len){ arr[j+len] = arr[j] } arr[j+len] = temp; } len = Math.floor(len/2) }
原文地址:https://www.cnblogs.com/mp-0518/p/11440541.html
- 李沐:从头开始介绍机器学习,眼花缭乱的机器学习应用
- hdu------2488Tornado(几何)
- nyoj------203三国志
- nyoj 115------城市平乱( dijkstra // bellman )
- hdu----(1847)Good Luck in CET-4 Everybody!(简单巴什博奕)
- hdu----(3118)Arbiter(构造二分图)
- hdu----(1528)Card Game Cheater(最大匹配/贪心)
- hdu-----(1507)Uncle Tom's Inherited Land*(二分匹配)
- hdu----149850 years, 50 colors(最小覆盖点)
- hdu------1281 棋盘游戏(最小覆盖点)
- hdu-----(1179)Ollivanders: Makers of Fine Wands since 382 BC.(二分匹配)
- hdu-----(1151)Air Raid(最小覆盖路径)
- hdu-----(1150)Machine Schedule(最小覆盖点)
- 【重磅】微软Facebook联手发布AI生态系统,CNTK+Caffe2+PyTorch挑战TensorFlow
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux查看CUDA版本以及cudnn版本号
- 数据结构算法操作试题(C++/Python)——最长有效括号
- 数据结构算法操作试题(C++/Python)——两两交换链表中的节点
- 数据结构算法操作试题(C++/Python)——最大子序和
- 数据结构算法操作试题(C++/Python)——四数之和
- 数据结构算法操作试题(C++/Python)——在排序数组中查找元素的第一个和最后一个位置
- 数据结构算法操作试题(C++/Python)——搜索旋转排序数组
- 数据结构算法操作试题(C++/Python)——最后一个单词的长度
- IDEA 自动生成类注释和方法注释
- 包管理工具yarn的安装和使用详细介绍
- redis学习(九)
- 模型性能提升操作
- FM算法解析及Python实现
- 排序算法:快速排序解析及Python实现
- dubbo学习之本地存根实践