一、什么叫“希尔排序”

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

重点度已经帮你们标黄啦啦,忘了什么叫插入排序咋搞? 没关系,点它直达 排序算法之—插入排序(看完不懂来打我呀呀)

二、算法思想

  • 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1( < …<d2<d1),即所有记录放在同一组中进行直接插入排序为止。(百度官方解释,看不懂没关系,往下看你就懂了
  • 实质上是一种分组插入排序
  • 一般的初次取序列的一半为增量,以后每次减半,直到增量为1。(这里说的是一般,因为这个算法的复杂度与增量序列的大小有关)

三、看动图演示

  1. 数组假设如下:
  2. 演示:

    Gap=1时,因为上面排完,数组部分已经有序,所以接下来的完整数组进行插序时效率很高。
  3. 解析说明:
  • 第一次:Gap = 6 / 2= 3(数组长度除以2,这里用Gap来表示增量,取整来处理)
  • 第二次:Gap = 3 /2 = 1(增量为1,相当于一个完整数组进行插入排序,但是此时数组部分有序程度已经很高了,所以插入速度很快)

四、上代码

Java老大哥:

package suanFa;
import java.util.Arrays;
public class Sort {/*** 公众号:放牛娃学编程* 1.希尔排序(改进的插入排序)* 2.Gap增量,也就是两数组元素索引之间的间隔(白话说就是两个数相隔了多少)* 3.其实就是在插入排序的基础上加入一个外层控制增量* @param arr*/public static void shellSort(int[] arr){for(int Gap = arr.length / 2; Gap > 0; Gap /= 2){System.out.println(Gap);for(int j = Gap; j < arr.length; j++){for(int t = j; t >= Gap; t-=Gap){if(arr[t] < arr[t-Gap]){int temp = arr[t];arr[t] = arr[t-Gap];arr[t-Gap] = temp;}else{break;}}}}}public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = {9,3,8,0,4,1,7,2,6,76};System.out.println("未开始排序前:"+Arrays.toString(arr));shellSort(arr);System.out.println("排序完成后:"+Arrays.toString(arr));}
}

Python新竞老大哥:

#希尔排序
"""公众号:放牛娃学编程1.希尔排序(改进的插入排序)2.gap增量,也就是两数组元素索引之间的间隔(白话说就是两个数相隔了多少)3.其实就是在插入排序的基础上加入一个外层控制增量"""
def shellSort(c):N = len(c)gap = N // 2while(gap >= 1):for p in range(gap,N):Tmp=c[p]i=pwhile i>=gap and c[i-gap]>Tmp:c[i]=c[i-gap]i=i-gapc[i]=Tmpgap = gap // 2return c
if __name__ == "__main__":c=[1,5,3,11,4,9,6,8,2,13] print(shellSort(c))

如果上面的动态图你还是没看不懂,那我建议你一看看下面这篇文章:
希尔排序–简单易懂图解,
这篇我感觉作者很走心。所以这里推荐给大家看看

五、分享交流

最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!

  1. Java web从入门到精通电子书

  2. Python机器学习电子书

  3. Python400集(北京尚学堂)

  4. JavaScript项目案例、经典面试题

  5. Java300集(入门、精通)

  6. Java后端培训机构录集(同事培训内部提供)

排序算法之---希尔排序(一看你就懂滴)相关推荐

  1. 排序算法:希尔排序算法实现及分析

    希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...

  2. C/C++排序算法(2)希尔排序

    常见排序算法总结(2)希尔排序 一篇文章,带你搞懂 希尔排序 (注:代码语言的选择不应该限制了我们对算法的理解) 文章附有动图!一看就懂! (1)工作原理 希尔排序,也称递减增量排序算法,是插入排序的 ...

  3. 排序算法(4)希尔排序

    排序算法(4)希尔排序 原理: 希尔排序也称缩小增量排序:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap ...

  4. JAVA排序算法之希尔排序

    基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...

  5. [算法]-排序算法之希尔排序

    希尔排序算法思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序 ...

  6. 排序算法之希尔排序(Java实现)

    希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...

  7. php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识

    插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...

  8. 经典排序算法之希尔排序

    排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...

  9. 常见排序算法之希尔排序

    文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...

  10. Java排序算法之——希尔排序

    算法简述 希尔排序也叫作shell排序或缩小增量排序,据说是一个叫D.L.Shell的人发明出来的,顾取名shell排序.这种排序是基于插入排序思想的,也比较适用于数据量大时. 我刚开始看到时候对于插 ...

最新文章

  1. MySQL show processlist说明
  2. java使用链栈实现迷宫求解
  3. X509证书 指定了无效的提供程序类型 System.Security.Cryptography.CryptographicException 错误解决方法
  4. python切片语法-如何在Python中使用省略号切片语法?
  5. noi.ac NA535 【生成树】
  6. 城里城外看SSDT[转]
  7. pytorch教程龙曲良41-45
  8. double和float的误区!
  9. Oracle数据库开机自启动
  10. 降序排序_排序简单,应用不易,使用Excel排序的几点建议
  11. jquery中checkbox全选失效的解决方法
  12. linux 下ftp的上传与下载
  13. hash表 C++的使用以及理解
  14. 简述利用PE系统破解Windows密码
  15. CSDN博客给我带来的一些诱惑和选择机会
  16. 空间直线和三维物体之间的交线相关问题
  17. 《Dreamweaver CS6 完全自学教程》笔记 第十七章:Spry 框架技术
  18. 打破双亲委派的几种方式
  19. dash dock安装 to_Dash to Dock 安装配置(图文教程)
  20. BADI 构建方法(NEW BADI 实施)

热门文章

  1. 6C.项链(C++)
  2. PHP的面向对象编程思想
  3. 【NLP】AI相关比赛汇总(2022)
  4. Linux创建WIFI热点
  5. CSOL NST1007 V1.0 完整汉化版发布
  6. hive打patch流程说明
  7. 張學友 - Private Corner 新专辑1.29
  8. 可水解盐类pH值的计算
  9. 大数据分析技术种类与应用
  10. lls 在* 80端口已经绑定的情况下,批量加域名到*80端口