#include<iostream>
#include<vector>
using namespace std;
void ShellSort(vector<int> &seq)
{
int i, j;//复杂度O(n^(3/2))
auto len = seq.size();
int increment = len;
int tmp = 0;
while (increment >1)
{
increment = increment / 3 + 1;//选择一个增量,进行跳跃式比较
for (i = increment; i < len; ++i)
{
if (seq[i] < seq[i - increment])
{
tmp = seq[i];
for (j = i - increment; j>=0 && tmp < seq[j]; j -= increment)
{
seq[j + increment] = seq[j];
}
seq[j + increment] = tmp;
}
}
}
}
int main()
{
//希尔排序
vector<int> vec{ 9,1,5,8,3,7,4,6,2 };
ShellSort(vec);
for (auto i : vec)
cout << i << " ";
system("pause");
return 0;
}