希尔排序(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. TP3.2的删除缓存与引入第三方库的问题(二)
  2. 《剑指offer》c++版本 5.替换空格
  3. android 光晕动画,Android去掉SrollView、GrdiView、RecycleView、ViewPager等可滑动控件滑动到边缘的光晕效果...
  4. 短视频内容理解与生成技术在美团的创新实践
  5. 【RIA Services】系统分析
  6. Codeforces Round #731 (Div. 3) G. How Many Paths? dfs + 拓扑 + 思维
  7. springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...
  8. stm32滴答计时器_STM32的系统滴答定时器(Systick)
  9. Python笔记-requests获取web数据及下载文件
  10. python上传文件 request_Python request post上传文件常见要点
  11. FBReaderJ源码编译配置
  12. 20200521每日一句
  13. 支付宝当面付打赏系统源码
  14. 小米商城官网部分代码
  15. java图片转为矢量文件_java 通过batik 把svg格式的矢量图生成png图片
  16. 全世界最全牛人博客,你可以学习到太多!
  17. csv文件行数超过软件上限解决方案
  18. matlab设计用户界面,MATLAB程序设计教程(11)—MATLAB图形用户界面设计
  19. 【Mac】微信视频对方听不见你的声音
  20. python12306自动抢票为什么进入个人中心_python 12306自动抢票

热门文章

  1. 怎样去掉a标签的蓝框
  2. jQuery1.3.2 源码学习 -1 $ 是什么?jQuery 又是什么?
  3. [Ajax] 案例 -- 三级联动
  4. LeetCode--91. 解码方法(动态规划)
  5. C++数据结构——array、vector、链表
  6. 求整数的位数及各位数字之和 (15 分)
  7. PTA7、 转换函数使用 (10 分)
  8. 汇编语言---计算表达式的值
  9. 奇怪的象棋游戏及升级版
  10. oracle++dtcol,Oracle 中的 Incarnation 到底是个什么?实验操作篇