【前言】希尔排序是插入排序的优化版本,是以该排序的设计者的名字来命名的。下面跟着小编一下来了解一下希尔排序吧。
一、基本思想
希尔排序是根据间距对待排序的数进行分组,然后组内进行直接插入排序,然后缩小间距再分组,依次类推直到间距为1,完成排序之后整个排序就完成了。
我们一般去序列的一般为增量,以后每次减半,知道增量为1。
二、针对插入排序的改进
1.插入排序在对几乎已经排好序的数据操作时,效率高,既可以达到线性排序的效率。
2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。
三、希尔排序过程
四、希尔排序的代码实现
static void Main(string[] args)
{
int[] arr = { 49, 38,65, 97, 76, 13, 27, 49, 55, 04 };
Console.WriteLine("排序前的数组:");
foreach (int item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.WriteLine("排序后的数组:");
//调用希尔排序
ShellSort(arr, 10);
foreach (int item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.Read();
}
public static void ShellSort(int[] arr,int n)
{
//设置起始量
int gap = n / 2;
while (gap>=1) //增量为1时排序结束
{
for (int i = 0; i < gap; i++)
{
for (int j = i+gap; j < n; j=j+gap)
{
//对每个子序进行插入排序
int temp = arr[j];
int k = j - gap;
while (k>=i && arr[k]>temp)
{
arr[k + gap] = arr[k];
k = k - gap;
}
arr[k + gap] = temp;
}
}
gap = gap / 2;
}
}
【总结】希尔排序只一种不稳定的排序,但是它不需要大量的辅助空间,和归并排序一样容易实现。