思想:把元素按步长分组,对每组元素按直接插入排序算法排序。
时间复杂度:O(nlgn),最差O(n^1.3)
稳定性:不稳定
void ShellSort (int* A, int length)
{
if (A == NULL || length < 1)
{
return;
}
int gap = length / 2;
while(gap >= 1)
{
for (int i = gap; i < length; ++i)
{
int j = i - gap;
int key = A[i];
while(j >= 0 && A[j] >= key)
{
A[j+gap] = A[j];
j -= gap;
}
A[j+gap] = key;
}
gap /= 2;
}
}