🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
排序算法是一种将一组数据按照特定的规则进行排列的方法。排序算法通常用于对数据的处理,使得数据能够更容易地被查找、比较和分析。
下面是常见的11种排序算法:
希尔排序是插入排序的改进版,它的基本思想是将待排序的元素按照一定间隔(增量)分成几个子序列,分别进行插入排序,然后逐步缩小增量,最终将所有元素整合成一个有序序列。
具体来说,希尔排序的算法步骤如下:
希尔排序的关键在于增量序列的选择,一般使用Knuth增量序列(1, 4, 13, 40, …)或者Sedgewick增量序列(1, 5, 19, 41, 109, ...)等。增量序列的选取会影响排序效率。
希尔排序是一种基于插入排序的排序算法,它通过将数据序列分成若干个子序列来加快排序速度。在每个子序列中,使用插入排序对元素进行排序,最后再将所有子序列合并成一个完整的有序序列。
希尔排序的时间复杂度取决于步长序列的选择。目前最优的步长序列是由Sedgewick提出的,在此基础上,希尔排序的时间复杂度为O(n1.3)。也就是说,希尔排序的时间复杂度介于O(n)和O(n2)之间,但通常情况下,它的运行时间要优于其他O(n2)复杂度的排序算法,如插入排序和选择排序。
希尔排序的空间复杂度为O(1),即不需要额外开辟空间来存储数据。因此,希尔排序是一种稳定、快速、节省空间的排序算法,适用于中等大小的数据集合。
希尔排序的主要应用场景是在需要对大规模数据进行排序的场合。由于希尔排序可以高效地对数据进行排序,因此在大规模数据排序的领域广泛应用,例如,在计算机领域,希尔排序被广泛应用于数据库索引、文件排序等方面。在工业领域,希尔排序也被应用于生产流程的优化,例如对零件进行排序等。总之,希尔排序适用于需要对大规模数据进行排序的场合,尤其是在对数据进行预排序的情况下表现更加优越。
/// <summary>
/// 希尔排序
/// </summary>
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;
}
}
}
}
}
}