1.原理 希尔排序是一种特殊的插入排序
void sort(vector<int>& nums)
{
int len = nums.size();
int gap = len/2;
while (gap >= 1)
{
for (int i = gap; i < len; i++)
{
int j = i - gap;
int a = nums[i];
for (; j >= 0; j = j - gap)
{
if (nums[j] > a)
{
nums[j+gap] = nums[j];
}
else break;
}
nums[j+gap] = a;
}
gap /= 2;
}
}
2.举例说明希尔排序是不稳定的
2 1 1 3
第一次
1 1 2 3
这个时候把第二个1放到第一个1前面去了
3.希尔排序的时间复杂度证明
目前还是个数学难题
O(n^(1.3—2))