希尔排序是改进的插入排序,将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序……最后选择增量为1,即使用直接插入排序,使最终数组成为有序。
void ShellSort(int* a, int len)
{
int d = len / 2;
while (d >= 1)
{
for (int i = 0; i < d; i++)
{
//////插入排序
for (int j = i + d; j < len; j += d)
{
int base = a[j];
while (i<j)
{
int k = j - d;
if (base < a[k])
{
a[j] = a[k];
j = k;
}
else break;
}
if (base < a[j]) a[j] = base;
}
}
d /= 2;
}
}