《Algorithm算法》笔记:元素排序(2)——希尔排序
《Algorithm算法》笔记:元素排序(2)——希尔排序
- Algorithm算法笔记元素排序2希尔排序
- 希尔排序思想
- 为什么是插入排序
- h的确定方法
- 希尔排序的特点
- 代码
有关排序的介绍,看上一个笔记:《Algorithms算法》笔记:元素排序(1)——简单排序
希尔排序是这是本课程中出现的第一个非平凡的排序算法。
希尔排序思想
希尔的思想也很简单就是一个h-sort的插入算法——每相邻h个元素进行插入排序
为什么是插入排序?
- 如果h比较大,那么子数组会很小,用插入效率高
- 如果h很小,这时候数组基本有序,插入效率高
h的确定方法:
一般常用的是 : h=3h+1 ——兼顾奇偶
希尔排序的特点:
简单的想法却导致巨大的性能收益!
- 在实际使用中,对于不是特别大的数组,排序速度快。
- 代码量小(可用与嵌入式中)
- 硬件类算法原型
- 通过找更好的递增数列可以有更好的性能提升(这是一个新的课题)
代码:
public class Shell{public static sort(Comparable[] a){int N = a.length();int h = 1;while(h < N/3) //找比n小的最大hh = 3*h+1;do{for(i = h;i < N; i++){for(j = i;j >= h && less(a[j],a[j-h]);j -= h) exch(a,a[j],a[j-h]);}h = h/3; //由于是取整操作所以h/3 == (h-1)/3}while(h > 1)}
}
注意: 这里的循环
for(i = h;i < N; i++) for(j = i;j >= h && less(a[j],a[j-h]);j -= h)
是用的i从前往后,j从后往前。j也可以用从前往后
for(i = 0;i < N-h; i++) for(j = i;j + h < N && less(a[j+h],a[j]);j += h)
转载于:https://www.cnblogs.com/voidsky/p/5373923.html
《Algorithm算法》笔记:元素排序(2)——希尔排序相关推荐
- 数据结构与算法笔记(九)—— 希尔排序
什么是希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 该方法因DL.Shell于1959年提出而得名 ...
- 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数
本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...
- 排序算法:冒泡排序、插入排序、选择排序、希尔排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...
- 希尔排序python 简书_排序:希尔排序(算法)
文 | 莫若吻 (注:如果想更好的理解希尔排序,请先看看我的上一篇博客插入排序,希望会对你有帮助.) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩 ...
- 【排序算法】冒泡排序|选择排序|插入排序|希尔排序
文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序 第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...
- java代码实现希尔排序_Java希尔排序算法代码实现
Java希尔排序算法代码实现 时间:2017-08-30 来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...
最新文章
- Android中的Handler
- Flutter 2 源码阅读
- MOCTF-Web-登录就对了
- oracle 表达式1000,oracle环境下占用编号的方法报语法错误:ORA-01795: 列表中的最大表达式数为 1000...
- Redis 常用配置参数
- zynq文档阅读之GPIO的中断
- Eclipse快捷键收集
- Asp.NetCore远程自启动、重启、关闭实现
- Android, App常用图标尺寸规范
- 判断设备访问类型是PC端还是WAP端
- 【推文】人间清醒VS梅花痣俏郎君
- 【数值分析】插值法:拉格朗日插值、牛顿插值
- 软件工程期末复习笔记(文末有PDF版本)
- Unity—常用API(重点)
- 「合规」震惊!地图可视化竟能如此玩,零门槛,全免费,效果远胜主流作图工具!...
- nginx 单页面应用部署配置
- 开发摩托罗拉PDA MC3100 应用程序
- 开发语言的静态/动态,强类型/弱类型之分
- Berkeley DB的使用
- ffmpeg mp4 mp3 pcm flac转换