希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。

上面的这段叙述来自百度百科,我们可以知道希尔排序是插入排序的改进版,如果插入排序还没有搞清楚的话,建议先去看这篇博客补一补:都是❤️两层循环❤️的冒泡排序,选择排序,插入排序该怎么区分。这里我们也大致在对插入排序做个复习。

插入排序将第一个数(也可以识别的)看为有序区间开展,从第二个数开始依次拿着每个数去到有序区间依次比较,最终插入到合适他的地方。

希尔排序做了升级,遵循下面这个循环:

  1. 按照一个规则将待排序序列分组(分组规则有很多,我们这里介绍一种:开始将序列分成序列长度除以二组,比如一共十个数,除以二等于五,就先分成5组,两个为一组,然后每次循环都会重新除以二分组,第二次就是 5 / 2向下取整为2组,第三次是一组)
  2. 然后对同一组做组内插入排序,我们做升序
  3. 组数除以二,现在就是2组,就是五个为一组
  4. 回到2循环

一直到所有数为同一组,再做最后一次排序。最后一次就是我们理解的对整个序列插入排序,这次排序结束序列也就有序了,下面看一下动图演示:

可以清楚地看到最后一次就是我们原来学的插入排序,那么有些人就有疑问了,为什么要大费周章的先从分组做插入排序开始?因为这样做会让每个数字更快的接近他排好序的位置,从而节省了时间,可以直白的理解为这么做就是更快了。。。
下面是代码实现:

   public static void insertSort(int[] array, int size){for (int i = size; i < array.length; i++){int j;int val = array[i];for (j = i - size; j >= 0 && val < array[j]; j -= size){array[j +size] = array[j];}array[j + size] = val;}}public static void shellSort(int[] array){int size = array.length / 2;while (true){insertSort(array, size);if (size == 1){break;}size /= 2;}}

希尔排序(Shell Sort)相关推荐

  1. C语言实现希尔排序shell sort算法之一(附完整源码)

    希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...

  2. C语言实现希尔排序shell sort算法之二(附完整源码)

    希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...

  3. 经典排序算法 - 希尔排序Shell sort

    经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...

  4. 希尔排序( Shell Sort )使用不同的步长序列( gaps )

    希尔排序( Shell Sort )使用不同的步长序列( gaps ) 希尔排序的定义 希尔排序(Shellsort),也称递减增量排序算法,是插入排序的一种更高效的改进版本.希尔排序是非稳定排序算法 ...

  5. sort降序shell_排序之希尔排序(shell sort)

    前言 本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此:一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自 ...

  6. 图解希尔排序——希尔排序算法(shell sort)

    希尔排序 shell sort 算法图解 算法实现(C语言) 算法分析 希尔排序又叫缩小增量排序,它是对直接插入排序算法的一种改进.希尔排序算法的基本思想是先将整个待排序的序列划分为若干个子序列,然后 ...

  7. 用python写希尔排序_python希尔排序介绍(实例)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个&qu ...

  8. 算法系列【希尔排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 关于时间复杂度: 1.     平方阶 (O(n2)) 排序各类简单排序:直接插入 ...

  9. Java数据结构与算法(六) 希尔排序

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

  10. 我的Java开发学习之旅------gt;Java经典排序算法之希尔排序

    一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...

最新文章

  1. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境
  2. ES6 let const 关键字
  3. 两种方式调试JNI中DLL(动态链接库)
  4. ab plc软件_回收三菱PLC模块西门子模块AB模块数控模块单片机回收【三菱plc吧】...
  5. 教你如何快速入门python_如何快速入门python
  6. ICCV 2019 | 厦大提出快速NAS检索方法,四小时搜索NN结构
  7. 在单链表写入一组数据代码_第5章 第1节 链表 - osc_x8s7voop的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 自动驾驶 5-3 前馈速度控制 Feedforward Speed Control
  9. Unity 3D下载安装教程
  10. cinahl数据库怎么进入_CINAHL数据库的检索系统及相关检索方法
  11. 微信小程序:二维码生成器,输入信息生成二维码,调用相机扫描二维码,获取信息
  12. 如何用python爬取图片数据_python爬虫怎么实现爬取网站图片?
  13. 火狐 Firefox 浏览器书签同步问题
  14. IDELAY输入延迟分析
  15. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(三)
  16. Permission denied: user=dr.who, access=WRITE, inode=“/“:root:supergroup:drwxr-xr-x
  17. 股票自选股基本函数大全-5
  18. Spring 学习 (三)大话AOP
  19. 【飞轮储能】基于simulink的飞轮储能发电系统的仿真
  20. 设计模式之禅之接口隔离原则

热门文章

  1. 学生管理系统分层开发
  2. seajs学习一天后的总结归纳
  3. Spring 中设置依赖注入
  4. JVM证书制作步骤+耶鲁 CAS 配置
  5. win10环境下VTK7.1的编译和Qt调用VTK的详细教程二(VS2013编译支持Qt的VTK库)
  6. OpenCV3学习(12.5) opencv实现粒子滤波目标跟踪
  7. L1-046 整除光棍 (20 分)567
  8. 上位机通过串口获取单片机数据
  9. java 分层领域模型_Java领域模型 | 学步园
  10. php mysql foreach_php foreach输出两次