C语言学习-菜鸟教程C经典100例-练习39

C语言学习-菜鸟教程C经典100例-练习39

题目

有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。


思路

  • 从前往后遍历,找到第一个满足插入条件的位置;
  • 从数组末尾开始,将插入位置后的元素都向后移动一位;
  • 在新位置插入元素;
  • 更新数组大小

代码

c 复制代码
#include <stdio.h>

#define MAX_SIZE 100

int main(){
    int arr[MAX_SIZE];
    int n; // 当前数组元素个数
    int new_num; // 要插入的数

    // 输入已排序的数组
    printf("请输入已排序的数组元素个数(不超过%d):", MAX_SIZE - 1);
    scanf("%d", &n);

    // 判断数组范围有效
    if(n <= 0 || n >= MAX_SIZE){
        printf("输入的数组大小不合法!\n");
        return 1;
    }

    // 输入数组元素
    printf("请输入%d个已排序的整数(从小到大):\n", n);
    for(int i=0; i<n; i++){
        scanf("%d", &arr[i]);
    }

    // 判断数组是否已排序
    for(int i=1; i<n; i++){
        if(arr[i] < arr[i-1]){
            printf("输入的数组未按升序排序!\n");
            return 1;
        }
    }

    // 输入要插入的数
    printf("请输入要插入的整数:");
    scanf("%d", &new_num);

    // 原始数组
    printf("插入前的原始数组:\n");
    for(int i=0; i<n; i++){
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 找到插入位置
    int pos = n; // 默认插入到数组末尾
    for(int i=0; i<n; i++){
        if(new_num < arr[i]){
            pos = i;
            break;
        }
    }

    // 后移元素
    for(int i=n; i>pos; i--){
        arr[i] = arr[i-1];
    }

    // 插入新元素
    arr[pos] = new_num;
    n++; // 更新数组大小

    printf("\n插入后的数组:\n");
    for(int i=0; i<n; i++){
        printf("%d ", arr[i]);
    }
    printf("\n");

    printf("插入位置:第%d个元素\n", pos+1);

    return 0;
}

输出结果

c 复制代码
请输入已排序的数组元素个数(不超过99):10
请输入10个已排序的整数(从小到大):
1 4 6 9 13 16 19 28 40 100
请输入要插入的整数:10
插入前的原始数组:
1 4 6 9 13 16 19 28 40 100

插入后的数组:
1 4 6 9 10 13 16 19 28 40 100
插入位置:第5个元素
相关推荐
三品吉他手会点灯11 小时前
C语言学习笔记 - 35.数据类型 - printf函数的非输出控制符与格式优化
c语言·开发语言·笔记·学习
Ghost Face...12 小时前
U-Boot SPL阶段与主阶段深度解析:从ROM到Kernel的完整引导之旅(ARMv8)
c语言
三品吉他手会点灯13 小时前
C语言学习笔记 - 33.数据类型 - printf函数的详细用法
c语言·开发语言·笔记·学习·算法
t-think15 小时前
深入理解指针(2)
c语言·开发语言
我不是懒洋洋15 小时前
从零开始实现一个简单的神经网络:C语言版
c语言
百万老师16 小时前
自然语言编程时代,如何零基础学习掌握嵌入式编程
c语言·单片机·嵌入式硬件·学习·ai全流程闭环开发
淞綰17 小时前
c语言的练习-字符串的练习-寻找最长连续字符以及出现次数
c语言·数据结构·学习·算法·c语言的练习
三品吉他手会点灯19 小时前
C语言学习笔记 - 36.数据类型 - 为什么需要输出控制符
c语言·开发语言·笔记·学习
阳光九叶草LXGZXJ19 小时前
自制数据库迁移工具-C版-07-HappySunshineV1.6-(支持PG、达梦、Gbase8a)
linux·c语言·开发语言·数据库·学习·postgresql
星恒随风19 小时前
从0开始的操作系统学习之路(2)
c语言·笔记·学习