具体思路看这篇博文,写得比我好多啦!我可懒得画这老些图 :)
https://www.cnblogs.com/wanglei5205/p/8727377.html
核心代码如下:
void ShellSort(vector<int> &Input)
{
int size = Input.size();
int gap = size / 2;
for (; gap > 0; gap /= 2)
{
for (int i = gap; i < size; i++)
{
int j = i;
while (j-gap>=0&&Input[j-gap]>Input[j])
{
int temp = Input[j];
Input[j] = Input[j - gap];
Input[j - gap] = temp;
j -= gap;
}
}
}
}