“基本思想:
先取一个小于 n 的整数 d1 作为第一个增量,把文件的全部记录分成 d1 个组。所有距离为 d1 的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量 d2 < d1 重复上述的分组和排序,直至所取的增量 dt=1(dt < dt-1 < … < d2 < d1),即所有记录放在同一组中进行直接插入排序为止。”
时间复杂度O(Nlog2N)
void shellSort(int arr[], int lenght)
{
int gap = lenght / 2;
while(1 <= gap)
{
for (int i = gap; i < lenght; ++i)
{
int temp = arr[i];
for (int j = i - gap; j >= 0 && temp < arr[j]; j -= gap)
{
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
gap /= 2;
}
}