#include <iostream>
#include <vector>
using namespace std;
template<typename T>
void shellSort(vector<T> &a)
{
int gap = a.size()/3 +1 ; //分组步长
while (1 <= gap)
{
// 把距离为 gap 的元素编为一个组,扫描所有组
for (int i = gap; i < a.size(); i++)
{
int j = 0;
int temp = a[i];
// 对距离为 gap 的元素组进行插入排序
for (j = i - gap; j >= 0 && temp < a[j]; j = j - gap) {
a[j + gap] = a[j]; //符合条件的元素后移动
}
a[j + gap] = temp;
}
//System.out.format("gap = %d:\t", gap);
//printAll(list);
gap = gap/2; // 减小增量
}
}