希尔排序
希尔排序
希尔排序是插入排序的一种,也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法;随着增量逐渐减少,每组包含的关键词越来越多。当增量减至1时,每个文件恰被分成一组,算法结束。
void ShellSort(vector<int> &nums){
int len = nums.size();
if(len<2){
return;
}for(int dk = len/2;dk>0;dk/=2){//每dk个元素为一组
for(int i=dk;i<len;++i){//从第二组的第一个元素开始
if(nums[i]<nums[i-dk]){//进行第一次比较
int temp = nums[i];
int j = i-dk;
for(;j>-1&&nums[j]>temp;j-=dk){//迭代每一次组
nums[j+dk]=nums[j];
}
nums[j+dk]=temp;
}
}
}
}

浙公网安备 33010602011771号