基本思想:
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。(不稳定的排序算法)
private static void ShellSort(int [] arr)
{
int k = arr.Length/2;
while (k >= 1)
{
ShellInsertSort(arr,k);
k = k/2;
}
}
private static void ShellInsertSort(int[] arr,int dk)
{
for (int i = dk; i < arr.Length; ++i)
{
if (arr[i] < arr[i - dk])
{
int j = i - dk;
int x = arr[i];
arr[i] = arr[i-dk];
while (j>0 && x < arr[j])
{
arr[j + dk] = arr[j];
j -= dk;
}
arr[j + dk] = x;
}
}
}