当前位置: 首页 > 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

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

相关文章:

  • 【大模型实战】利用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
  • 贪心算法简介(greed)
  • Go语言为什么运行比Java快
  • 软著申请流程图
  • Netty基础—3.基础网络协议一
  • java中的队列Queue
  • mysql之主从切换
  • 207、【图论】孤岛的总面积
  • 【Godot4.2】Vector2向量插值的应用
  • DeepSeek 多模态大模型 Janus-Pro 本地部署教程
  • Android中的FragmentTransaction是什么以及如何使用它