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),除了输入输出外,仅使用了常数级别的额外空间。

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

相关推荐
乌萨奇也要立志学C++8 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
鱼跃鹰飞9 小时前
Leetcode1891:割绳子
数据结构·算法
无限进步_11 小时前
【C语言&数据结构】对称二叉树:镜像世界的递归探索
c语言·开发语言·数据结构·c++·git·算法·visual studio
玖剹12 小时前
队列+宽搜(bfs)
数据结构·c++·算法·leetcode·宽度优先
C++ 老炮儿的技术栈13 小时前
什么是通信规约
开发语言·数据结构·c++·windows·算法·安全·链表
萧瑟其中~13 小时前
二分算法模版——基础二分查找,左边界查找与右边界查找(Leetcode的二分查找、在排序数组中查找元素的第一个位置和最后一个位置)
数据结构·算法·leetcode
码农小韩14 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
想做后端的小C15 小时前
408 数据结构:数据结构三要素——逻辑结构、物理(存储)结构和运算操作
数据结构
栈与堆15 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust