希尔排序C++实现

希尔排序是一种高效的排序算法,但网上的实现常有错误。本文提供清晰的C++代码实现,并呼吁复制代码时要进行思考和验证,避免传播错误信息。欢迎指出代码中的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

#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) {
            // 这个地方也蛮考究的,其实是一个交换排序,需要认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值