当前位置: 首页 > article >正文

希尔排序中的Hibbard序列

一  定义
Hibbard序列的每个元素由以下公式生成:
h_k = 2^k - 1 
其中k从1开始递增,序列为:1, 3, 7, 15, 31, 63, …

 

二  生成方式
     起始条件:k=1,对应h_1=2^1-1=1
     递推公式:每次k增加1,计算                              h_{k+1}=2^{k+1}-1
      示例:前5项为:1, 3, 7, 15, 31

三  在希尔排序中的应用
1  目的

      作为希尔排序的步长(间隔序列),用于将数据分为多个子序列进行插入排序。
2  操作步骤
  1. 从最大的h_k(小于数组长度n)开始。
  2. 按递减顺序使用Hibbard序列中的步长。
  3. 对每个步长,执行插入排序。

四 C++ 实现步骤

1 生成Hibbard序列

#include <vector>
using namespace std;

vector<int> generateHibbardSequence(int n) {
    vector<int> sequence;
    int k = 1;
    // 找到最大的k使得2^k -1 < n
    while ((1 << k) - 1 < n) {  // 1<<k等价于2^k
        k++;
    }
    k--;  // 回退到最后一个


http://www.kler.cn/a/595315.html

相关文章:

  • 如何在MCU工程中启用HardFault硬错误中断
  • FPGA中串行执行方式之状态机
  • 蓝桥杯 之 数论
  • Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
  • Windows10配置OpenJDK11
  • 基于深度学习的目标追踪技术全解析
  • 验证码背后:前端安全问题的深度剖析
  • 前端网络请求
  • 【强化学习】Reward Model(奖励模型)详细介绍
  • 智能工厂能耗分析:Python驱动的高效能源管理
  • 「0基础学爬虫」爬虫基础之抓包工具的使用
  • SQLite 查询数据库属性
  • AI视频是否会影响原创价值
  • 人工智能:企业RAG方案
  • 浅谈跨平台框架的演变(H5混合开发->RN->Flutter)
  • 【C++11】左值引用、右值引用、移动语义和完美转发
  • 编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化
  • 【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5
  • 城市更新浪潮下的破局之道:中建海龙模块化集成建筑技术的新应用
  • 2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第三场次题目:公有云部署与运维