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

Ciura序列

一 概述

      Ciura序列是一种用于希尔排序(Shell Sort)的高效增量序列。  由Marcin Ciura于2002年通过实验提出。
 1)经验证最优的初始序列为:[1, 4, 10, 23, 57, 132, 301, 701]
2) 后续增量可通过最后一个元素乘以2.25生成(如:701*2.25=1577,1577*2.25=3548...)。
3)时间复杂度约为O(n^{3/2}),优于传统希尔排序的O(n^2)。

二  C++实现步骤

void shellSortCiura(vector<int>& arr) {
    vector<int> gaps = {701, 301, 132, 57, 23, 10, 4, 1}; // 逆序排列
    
    for (int gap : gaps) {
        for (int i = gap; i < arr.size(); ++i) {
            int temp = arr[i];
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp;
        }
    }
}
 

三 关键注意点
1)逆序使用序列:必须从最大间隔开始递减。
2)数组边界:当数组长度超过最大gap时,需动态扩展序列。
3)性能优化:Ciura序列在中等规模数据(n ≤ 10^6)表现最佳。
4)稳定性:希尔排序本身是不稳定排序。

四 优缺点对比
  1)优点:实验验证效率高,无需复杂计算。
   2)缺点:固定序列对超大数据需扩展,不如Sedgewick序列灵活。

      建议优先使用Ciura序列实现希尔排序,特别是在处理中等规模随机数据时。当数据量极大时,可结合动态生成的扩展序列使用。

 

相关文章:

  • 弱网测试:全链路实战、高阶策略与自动化落地
  • 多线程14(哈希表与文件操作IO)
  • CPU架构和微架构
  • 中颖SH366000介绍和使用全解
  • Web安全策略CSP详解与实践
  • HTTP请求过程详解
  • 构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据
  • /2要求:定义一个方法,根据id查找对应的用户信息 //如果存在,返回id //如果不存在,返回-1
  • 蓝桥杯 小球反弹
  • 278.缀点成线
  • uniapp 和 webview 之间的通信
  • 【1】Java 零基础入门学习(小白专用)
  • 新配置了一台服务器+域名共178:整个安装步骤,恢复服务
  • Docker逃逸
  • 基于SSM框架的汽车租赁平台(源码+lw+部署文档+讲解),源码可白嫖!
  • React Native进阶(六十一): WebView 替代方案 react-native-webview 应用详解
  • Redis内存碎片详解
  • 1998-2022年各地级市第三产业占GDP比重/地级市第三产业占比数据(市辖区)
  • 人工智能 - 通用 AI Agent 之 LangManus、Manus、OpenManus 和 OWL 技术选型
  • 大数据平台上的数据建模与分析:从数据到决策的跃迁
  • 北京发布今年第四轮拟供商品住宅用地清单,共计5宗22公顷
  • 举牌超200轮!中铁建7.76亿元竞得北京通州梨园宅地
  • 李在明涉嫌违反《公职选举法》案将于5月1日宣判
  • “自己生病却让别人吃药”——抹黑中国经济解决不了美国自身问题
  • 人社部:将会同更多部门分行业、分领域制定专项培训计划
  • 央行副行长:我们在研究丰富政策工具箱,将适时推出增量政策