希爾排序是基於插入排序的快速的排序算法,中心思想是一個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);
}
}
}
}