希尔排序(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

最新文章

  1. WinForm最小化到托盘以及托盘右键菜单
  2. MVC丶 (未完待续&#183;&#183;&#183;&#183;&#183;&#183;)
  3. linux环境变量的设置
  4. 金蝶EAS BOS上如何打补丁
  5. 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader
  6. 2016 - 1 - 3 国旗选择demo
  7. vs2010 release 模式加了断点,跑代码无法跟踪,解决方法
  8. javascript中li标签的排序和数组sort的用法
  9. IE-首页跳转到 q160的问题解决
  10. hdu3415:最大k子段和,单调队列
  11. Android百度地图的简单实现
  12. [LeetCode] Valid Parenthesis String 验证括号字符串
  13. 前端实现搜索历史和清空历史(angularjs+ionic)
  14. 为什么面试你要25K,HR只给你20K?
  15. babel 插件编写
  16. .net 报错汇总——持续更新
  17. day7接口开发
  18. POJ1661(KB12-M DP)
  19. 关于C#中async/await中的异常处理(下)-(转载)
  20. C++总的const使用说明

热门文章

  1. echarts 实战 : 怎么写出和自动生成的一样的 tooltip ?
  2. CSS3伪类 :empty
  3. HDU - 1520 Anniversary party (树的最大独立集)
  4. SQL 给某字段添加汉字却显示??
  5. C++语法小记---面向对象模型(实例的内存分布)
  6. java 手机号码归属地查询
  7. Gradle系列之认识Gradle任务
  8. flask下直接展示mysql数据库 字段
  9. 基于Scrapy的B站爬虫
  10. 修改docker中mysql登入密码(包括容器内和本地远程登入的密码)