原理
希尔排序,是对插入排序的一种改进,先分组有序,再全体有序;
手撕代码
void shellSort(vector<int> &vec)
{
int len = vec.size();
int j = 0;
int gap = len;//分组
do{
gap = gap/2;//这个策略可以修改,改善时间复杂度
for(int i = 0;i<gap;i++) //每一个分组排序
{
for(int j = i+gap;j<len;j+=gap)//参考直接插入排序,待排序数组部分
{
int ele = vec[j];int m = 0;
for(m = j-gap;m>=0;m-=gap) //找到当前vec[j]值合适位置插入
{
if(ele<vec[m])
{
vec[m+gap] = vec[m];//移位操作
}else
break;
}
vec[m+gap] = ele;
}
}
}while(gap>0);
}