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

希尔排序中的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--;  // 回退到最后一个

相关文章:

  • AI大白话(四):自然语言处理——AI是如何理解和生成人类语言的?
  • 自动化测试框架详解
  • 车载软件架构 --- AUTOSAR AP/CP中诊断的区别
  • Python functools 模块的 @lru_cache 装饰器介绍
  • wps字符很分散
  • 【STM32】SPI通信协议W25Q64Flash存储器芯片(学习笔记)
  • OSS Browser2.0安装使用(阿里云对象存储OSS 图形化界面工具2.0版本)
  • 集成学习(下):Stacking集成方法
  • iPaaS集成平台安全通信的挑战与保障策略
  • MyBatis之参数传递
  • 网络故障排查指南:分治法与排除法结合的分层诊断手册
  • Diamond软件的使用--(5)查看原语
  • 【HTTP 传输过程中的 cookie】
  • 基于springboot和vue项目使用docker部署项目到服务器
  • 【DeepSeek 学c++】dynamic_cast 原理
  • Linux驱动学习笔记(六)
  • HAL库中串口中断开启
  • 23种设计模式(扩展)
  • Elasticsearch 倒排索引 和 正排索引
  • 健康养生:拥抱生活,从呵护身心开始
  • 为何选择上海?两家外企提到营商环境、人才资源……
  • 深圳拟出让3宗居住用地,共计用地面积6.77公顷
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 安徽省委常委、合肥市委书记费高云卸任副省长职务
  • 人民日报评外卖平台被约谈:合法规范经营,公平有序竞争
  • 茅台回应“茅台1935脱离千元价位带竞争”:愿与兄弟酒企共同培育理性消费生态