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