//希尔排序
template<typename T>
void ShellSort(T arr[], int n)
{
for(int d=n/2;d>=1;d/=2)
{
for (int i = d; i < n; i++)
{
T temp = arr[i];
int j = i;//保存元素temp应该插入的位置
for (; j >= d && arr[j - d] > temp; j -= d)
{
arr[j] = arr[j - d];
}
arr[j] = temp;
}
}
}