希尔排序是基于插入排序的快速的排序算法,中心思想是一个h有序数组就是h个互相独立的有序数组组成的。代码如下
public class Sort_Shell
{
public static void Sort<T>(List<T> v) where T : IComparable
{
int N = v.Count;
int h = 1;
while (h < N / 3)
{
h = h * 3 + 1;
}
while (h >= 1)
{
//将数组变成h有序
for (int i = h; i < N; i++)
{
//将v[i]插入到a[i-h] a[i-2h]....之中
for (int j = i; j > 0 && v[j].CompareTo(v[j - h]) < 0; j -= h)
{
Sort_Templet.exch<T>(v, j, j - h);
}
}
h = h / 3;
}
for (int i = 1; i < N; i++)
{
int j = i;
for (; j > 0 && v[j].CompareTo(v[j - 1]) < 0; j--)
{
Sort_Templet.exch<T>(v, j, j - 1);
}
}
}
}