当前位置: 首页 > 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--;  // 回退到最后一个

http://www.dtcms.com/a/81548.html

相关文章:

  • 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 倒排索引 和 正排索引
  • 健康养生:拥抱生活,从呵护身心开始
  • [OpenCV】相机标定之棋盘格角点检测与绘制
  • 集成学习(Ensemble Learning)基础知识2
  • 2025-03-21 Unity 网络基础3——TCP网络通信准备知识
  • 对比4款远程控制软件,画质、性能、功能谁全面?
  • Matplotlib
  • [特殊字符] 2025蓝桥杯备赛Day10——B2120 单词的长度
  • 高效字符串匹配:KMP算法
  • vscode连接本地mysql数据库
  • AIGC智能体(Ai星图)
  • vue-cli如何正确关闭prefetchprefetch和preload