希尔排序:其实就是把插入排序的数字进行一定的分组。使得大的数字更快的掉到后面去,更小的数字更快的到达前面
如下图所示
只是在每一组之间进行自己的插入排序。
这样大大加快了插入排序的速度。
代码实现如下
void shellsort(vector<int>& v)
{
int gap;
int end;
gap = v.size();
while (gap > 1)
{
gap = gap / 2;
for (int i = 0; i < v.size() - gap; i++)
{
end = i;
int temp = v[end + gap];
while (end >= 0)
{
if (v[end] > temp)
{
v[end + gap] = v[end];
end -= gap;
}
else
{
break;
}
}
v[end + gap] = temp;
}
}
}
实现方式,我们开始把gap设为大小的1/2;然后进行分组进行插入排序。当最后阶段gap==1时进行的是插入排序,大大降低了运行时的时间增加了很大的效率;
希尔排序的时间复杂度我还不是学的很明白,但是基本了解欢迎广大网友的评论