《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)——希尔排序相关推荐

  1. 数据结构与算法笔记(九)—— 希尔排序

    什么是希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 该方法因DL.Shell于1959年提出而得名 ...

  2. 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  3. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  4. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较

    掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中 ...

  5. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  6. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  7. 希尔排序python 简书_排序:希尔排序(算法)

    文 | 莫若吻 (注:如果想更好的理解希尔排序,请先看看我的上一篇博客插入排序,希望会对你有帮助.) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩 ...

  8. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

  9. java代码实现希尔排序_Java希尔排序算法代码实现

    Java希尔排序算法代码实现 时间:2017-08-30     来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...

最新文章

  1. Android中的Handler
  2. Flutter 2 源码阅读
  3. MOCTF-Web-登录就对了
  4. oracle 表达式1000,oracle环境下占用编号的方法报语法错误:ORA-01795: 列表中的最大表达式数为 1000...
  5. Redis 常用配置参数
  6. zynq文档阅读之GPIO的中断
  7. Eclipse快捷键收集
  8. Asp.NetCore远程自启动、重启、关闭实现
  9. Android, App常用图标尺寸规范
  10. 判断设备访问类型是PC端还是WAP端
  11. 【推文】人间清醒VS梅花痣俏郎君
  12. 【数值分析】插值法:拉格朗日插值、牛顿插值
  13. 软件工程期末复习笔记(文末有PDF版本)
  14. Unity—常用API(重点)
  15. 「合规」震惊!地图可视化竟能如此玩,零门槛,全免费,效果远胜主流作图工具!...
  16. nginx 单页面应用部署配置
  17. 开发摩托罗拉PDA MC3100 应用程序
  18. 开发语言的静态/动态,强类型/弱类型之分
  19. Berkeley DB的使用
  20. ffmpeg mp4 mp3 pcm flac转换

热门文章

  1. JavaScript容易犯错的九个陷阱
  2. 通用机器学习流程与问题解决架构模板
  3. 倒车辅助Park Assist
  4. HSV(HSL)颜色空间及其应用
  5. GPU 2012年10月 性能排名
  6. 【JavaScript】核心语法之数组
  7. 记一次意外的自定义控件
  8. VSS自动发布站点功能扩展
  9. 《Python数据科学指南》——1.16 使用lambda创造匿名函数
  10. 文件操作:在某手诗文中插入一句话