希尔排序(Shell's Sort)

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/687 访问。

希尔排序是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法把数组按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组恰被分成一组,算法终止。


示例: 

public class Program {public static void Main(string[] args) {int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };int[] gaps = { 5, 3, 1 };for (int i = 0; i < gaps.Length; i++) {ShellsSort(array, gaps[i]);}ShowSord(array);Console.ReadKey();}private static void ShowSord(int[] array) {foreach (var num in array) {Console.Write($"{num} ");}Console.WriteLine();}public static void ShellsSort(int[] array, int gap) {int length = array.Length;for (int i = 0; i < gap; i++) {for (int j = i + gap; j < length; j += gap) {if (j < length) {if (array[j] < array[j - gap]) {int sentinel = array[j];int k = 0;for (k = j - gap; k >= i && sentinel < array[k]; k -= gap) {array[k + gap] = array[k];}array[k + gap] = sentinel;}}}}}}

以上是希尔排序算法的一种实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/687 访问。

8 11 21 28 32 43 48 56 69 72 80 94

分析:

在最坏的情况下时间复杂度为:  ,
最好的情况下时间复杂度为:  ,
平均情况下时间复杂度为:  。

希尔排序中增量序列的选择对算法的效率有重大的影响,其平均情况下时间复杂度的证明为世界性数学难度,目前根据经验发现的最好的增量序列在平均情况下的时间复杂度为:  。


AlgorithmMan:

AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。

下载链接:AlgorithmMan-Shell'sSort

C#算法设计排序篇之07-希尔排序(附带动画演示程序)相关推荐

  1. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...

  2. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  3. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  4. 算法设计和数据结构学习_2(常见排序算法思想)

    一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...

  5. 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

    题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...

  6. 算法设计与分析——十大经典排序算法一(1--5)

    目录 算法设计与分析--十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知 ...

  7. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序

    第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...

  8. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  9. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  10. 希尔排序 最坏时间_希尔排序算法

    希尔排序(Shell's Sort)是插入排序的一种,又称"缩小增量排序",是直接插入排序算法经过改进之后的一种更高效的版本.希尔排序为了加快速度简单地改进了插入排序,交换不相邻的 ...

最新文章

  1. ASP.NET2.0 GridView小技巧汇粹
  2. python整数类型-Python 的数值类型(整数、长整数、浮点数和复数)
  3. swap 将硬盘变内存
  4. 【题意分析】1024 Palindromic Number (25 分)_38行代码AC
  5. python write和writelines的区别,简单了解Python write writelines区别
  6. ulimit问题 关于nproc设置
  7. ext 如何判断是否是整数_Excel表格技巧—如何用ISNUMBER判断是否是数值
  8. mysql 吧库下的表名都加_mysql数据库表名大小写问题
  9. crm采用soap删除记录
  10. Nginx 架构详解
  11. OPPO宣布与哈苏达成影像战略合作
  12. maven的setting文件简单配置
  13. 前端笔记-201805
  14. mysql查询市区县_通过数据库获取省份城市区县的名字
  15. 栅栏密码解密——Java实现
  16. 极化码——比特翻转sc译码(SFSC译码)
  17. 蓝丝雨第八季高精端实战系列【商业实战DNF刷图】
  18. selenium 区域截图
  19. python导入包的输入法_鼠须管输入法 傻瓜版配置 - 基于 rime_pro 增强包
  20. Word中标题段前设置了值却不显示的解决办法

热门文章

  1. Python——集合字典解析的对象无序和无副本特性
  2. 《C和指针》——字符串常量实际上是个指针,你真的懂了么?
  3. C/C++——new一个二维数组
  4. 《C和指针》——数组的奇怪形式
  5. 9206-吃货联盟 需求分析
  6. 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)
  7. 前端开发 表单控件高级 0303
  8. openlayers 3读取加载geojson格式数据
  9. python 统计单词个数---从文件读取版本---不去重
  10. MapReduce编程实践之自定义数据类型