希尔排序

希尔排序

希尔排序是插入排序的一种,也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因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;
            }
        }
    }
}
posted @ 2022-03-02 19:04  霜鱼CC  阅读(6)  评论(0)    收藏  举报