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

PTA:有序顺序表的插入

请设计一个算法,在有序顺序表L中插入元素x,使得表依然有序,并输出新增元素后的表数据。

例如:
L的元素 1 3 5 7
插入新元素 4
输出 1 3 4 5 7
其中,L的长度不超过1000,当中的元素为非递减排序。

输入格式:

第一行输入L的长度
第二行输入L的元素
第三行输入要插入的元素x的值

输出格式:

输入插入元素后顺序表中各元素的值,值之间用一个空格间隔。

输入样例:

4
1 3 5 7
4

输出样例:

1 3 4 5 7 

代码

#include <stdio.h>

int main() {
    int L[1001]; // 最大容量为1001
    int n, x;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &L[i]);
    }
    scanf("%d", &x);
    
    // 寻找插入位置
    int pos = 0;
    while (pos < n && L[pos] < x) {
        pos++;
    }
    
    // 后移元素
    for (int i = n; i > pos; i--) {
        L[i] = L[i - 1];
    }
    L[pos] = x;
    n++; // 更新表长
    
    // 输出结果
    for (int i = 0; i < n; i++) {
        printf("%d ", L[i]);
    }
    return 0;
}

算法思路

  1. 输入处理:读取顺序表的长度、元素以及待插入元素。
  2. 寻找插入位置:通过遍历顺序表找到第一个大于或等于待插入元素的位置。
  3. 元素后移:将插入位置后的所有元素后移一位,为待插入元素腾出空间。
  4. 插入元素并更新表长:将元素插入到正确位置,并更新顺序表长度。
  5. 输出结果:遍历顺序表并输出所有元素。

复杂度分析

  • 时间复杂度:O(n),最坏情况下需要遍历整个数组并移动所有元素。
  • 空间复杂度:O(1),除了输入输出外,仅使用了常数级别的额外空间。

该算法确保在插入元素后,顺序表依然保持非递减顺序,适用于题目给定的约束条件。

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

相关文章:

  • SSH无密登录配置
  • 2012年IMO几何预选题第6题
  • 《游戏人工智能编程 案例精粹》阅读心得
  • PHP课程预约小程序源码
  • sprintf和sscanf的用法和区别
  • Debezium系列之:记录一次源头数据库刷数据,造成数据丢失的原因
  • RoboBERT:减少大规模数据与训练成本,端到端多模态机器人操作模型(西湖大学最新)
  • MySQL-慢SQL解析及调试分析思路
  • go channel 的用法和核心原理、使用场景
  • JUC并发—10.锁优化与锁故障
  • Spring Boot (maven)分页4.0.2版本 专业版- 模板化最终版(测试)
  • java多线程及线程池
  • Web自动化中Selenium下Chrome与Edge的Webdriver常用Options参数
  • 鸿蒙app 开发中 对于数组方法 filter 的理解
  • 洛谷B3629
  • C#初级教程(7)——初级期末检测
  • 代码随想录第十六天|二叉树part05--654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 前端面试-网络协议篇
  • 创建监听器报错“一个或多个listeners启动失败”
  • Java之泛型
  • Windows安装MySQL指南
  • SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)
  • LangChain系列:精通LangChain的合并文档链
  • 【论文阅读】SAM-CP:将SAM与组合提示结合起来的多功能分割
  • LeetCode 236.二叉树的最近公共祖先
  • 抗辐照加固CAN FD芯片的商业航天与车规级应用解析
  • 常用Web性能指标
  • idea安装硅基流动中免费的deepseek(2025)
  • C++标准库——move和forward
  • Windows辉煌的发展历程