排序算法(4)希尔排序


原理:

希尔排序也称缩小增量排序;希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap = gap / n+ 1 控制,越来越小,即增量减小),保证了最后一次进行直接插入排序,算法终止。

(其中直接插入排序是希尔排序gap = 1的特例)另外,gap越大,值越大的容易到最后面,但是不太接近有序。  一般gap不要超过数组大小的一半.

你可能会说为什么一开始就直接插入排序,毕竟最后也要进行一次直接插入排序,这是因为希尔排序在数的数量很多时比直接插入快很多,毕竟将有序数组排序肯定比一大段无序数组排序快。我不会做动画,网上有动画,看一下更好理解

转载:希尔排序动画


代码实现:

void ShellSort(int arr[], int n)
{int gap = n;//gap是间隔while (gap > 1){gap = gap / 3 + 1;//3是初始间隔,可以自定义,会越来越小,最终是1//单趟的直接插入排序for (int i = 0; i < n - gap; i++){int end = i;int temp = arr[end + gap];//直接插入排序是end减1,这个是end减gap,是步进值for (; end >= 0 && arr[end] > temp; end -= gap){arr[end + gap] = arr[end];}arr[end + gap] = temp;}}
}

排序算法(4)希尔排序相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. HDU2112(SPFA算法)
  2. python编写自动化脚本 与shell_脚本安装Discuz论坛(shell + Python 实现自动化安装)...
  3. python数据科学-数据预处理
  4. 深夜,学妹遇到了数据分析师生涯的第一个疑问
  5. 致电以验证您的JavaFX UI的响应能力
  6. window电脑关闭自动更新的方法,妈妈再也不用担心我开机等电脑啦
  7. 暑期项目经验(九) -- request session application
  8. Python读写txt
  9. node-webkit学习(1)hello world
  10. 圆周卷积(circular convolution)
  11. 点餐系统源码|点餐系统小程序源码
  12. uniapp手机号码正则验证
  13. 流程图绘制软件 Dia
  14. SPSS单因素方差分析
  15. linux 取消分区,如何在 Linux 中删除分区 | Linux 中国
  16. Shadow Defender 版本: 1.1.0.331注册码
  17. Navicat Premium 用于增强您的数据库管理系统
  18. JetBrains PyCharm JetBrains PyCharm 2018.1.3 x64永久破解
  19. P1457 城堡 The Castle(DFS+染色)
  20. 【愚公系列】2022年10月 微信小程序-电商项目-商品详情页面规格选择功能实现

热门文章

  1. [扫描线 线段树] BZOJ 4422 [Cerc2015]Cow Confinement
  2. UHF VHF等相关概念
  3. 监控系统存储服务器和磁盘阵列,监控存储服务器和磁盘阵列的区别
  4. 学会这几点自媒体才能尽可能的扩大文章的曝光度
  5. ie兼容性问题:页面内容显示不全,但不会出现滚动条
  6. 连英文资料都不够权威了,这篇重要的Intel 82801AA AC‘97 声卡的资料居然是德文的,还好我用了360网页翻译
  7. 中创|通用区块链为libp2p开发人员引入插件架构
  8. python学生信息管理系统策划文档
  9. 审查元素时发现data-v-xxxxx,这是啥?
  10. web.xml引入web-app dtd约束