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

有序数组的插入

题目

给定存储了 n 个从大到小排好序的整数,试将任一给定整数 x 插入数组中合适的位置,以保持结果依然有序。分析算法在最坏、最好情况下的时间、空间复杂度。

解题步骤

1.找到要插入的位置

2.移动元素

3.插入元素

4.数组长度加1

代码

bool DecrSeqInsert(ArrPtr array, ElemSet x) {
    if (array->size == kMaxSize) {
        return false;
    }
    // 检查元素是否已经存在
    for (int i = 0; i < array->size; i++) {
        if (array->data[i] == x) {
            return false;
        }
    }
    // 找到插入位置
    int insertPos = 0;
    while (insertPos < array->size && array->data[insertPos] > x) {
        insertPos++;
    }
    // 移动元素
    for (int i = array->size; i > insertPos; i--) {
        array->data[i] = array->data[i - 1];
    }
    // 插入元素
    array->data[insertPos] = x;
    // 更新数组大小
    array->size++;
    return true;
}

步骤详解

1.检查数组是否达到最大长度,检查待插入元素是否存在。

2.找到insertPos(这里是数组的一个索引)

// 找到插入位置
    int insertPos = 0;
    while (insertPos < array->size && array->data[insertPos] > x) {
        insertPos++;
    }

比如数组[5,4,1,0],   现在要插入3,  那么insertPos就是2,即元素1的索引。

3.移动元素

比如数组[5,4,1,0],   现在要插入3,那么1和0要向后移动一位。

for (int j = array->size; j > insertPos; j--) {
    array->data[j] = array->[j - 1];
}

4.数组长度加1

相关文章:

  • 【大模型实战】利用ms-swift微调框架对QwQ-32B推理模型进行微调
  • 批量将 CSV 按行拆分成多个文件
  • Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试(代码实现)
  • [项目]基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆
  • centos7通过yum安装redis
  • 论文解读 | AAAI'25 CoRA:基于大型语言模型权重的协作信息感知用于推荐
  • 【科研绘图系列】R语言绘制网络相关图(cor network plot)
  • 【架构差异】SpringとSpringBoot:Bean机制的深入剖析与自动配置原理
  • 【优选算法】二分法(总结套路模板)
  • 【C++指南】一文总结C++类和对象【下】
  • 17.JavaScript 自动化侦察工具
  • Go语言环境搭建并执行第一个Go程序
  • 使用 OptiSLang 和 MotorCAD 构建一个强大的电机优化元模型
  • Linux : 进程控制
  • 时序约束整理
  • Spring 框架学习
  • winform中chart控件解决显示大量曲线数据卡顿方法——删旧添新法
  • 基于大模型预测的巨细胞病毒视网膜炎诊疗全流程研究报告
  • Docker从入门到精通
  • iOS18.0 iPad适配问题-tabbar
  • 马上评|把孩子当牟利工具,这样的流量吃不得
  • 来论|以法治之力激发民营经济新动能
  • 上海电视节发布海报、宣传片:三十而励,光影新程
  • LPR名副其实吗?如果有所偏离又该如何调整?
  • 《缶翁的世界》首发:看吴昌硕王一亭等湖州籍书画家的影响
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”