希尔排序C++实现

Posted heihei36

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序C++实现相关的知识,希望对你有一定的参考价值。

网上关于希尔排序的文章很多,清一色的一顿理论分析然后给出一致错误的代码实现,让人非常怀疑人生。其实,这个算法的现实也就十来行,真的不明白哪来这么多的一致的错误实现。

希尔排序的理论分析,我就不去复印粘贴了,大家自行检索,一大堆一大堆的。我只给出代码实现和必要的注释。

#include <vector>
#include <random.h>
#include <iostream>

void shell_sort(std::vector<int>& arr) 
    int j = 0;
    // 计算gep,也就是分组的次数,gep为1停止
    for (int gep = arr.size() / 2; gep > 0; gep /= 2) 
        /*
         *
         * 遍历每组的成员,请注意步长为gep
         * 网上大量的错误代码就是这个地方的遍历次数没搞明白,导致理解起来非常吃力
         * 错误代码的一般写法: for (int i = gep; i < arr.size(); i++)
         *
         */
        for (int i = gep; i < arr.size(); i += gep) 
            // 这个地方也蛮考究的,其实是一个交换排序,需要认真思考
            int tmp = arr[i];
            for (j = i; j >= gep && arr[j - gep] > tmp; j -= gep) 
                arr[j] = arr[j - gep];
            
           

以上是关于希尔排序C++实现的主要内容,如果未能解决你的问题,请参考以下文章

希尔排序C++实现

希尔排序C++实现

C++实现各种插入排序(直接,折半,希尔)

八大数据排序法希尔排序法的图形理解和案例实现 | C++

C++实现希尔排序

希尔排序算法的C++实现