数组的插入和逆置操作

1)按从小到大的顺序输入10个整数存入一维数组中;(2)输出数组;(3)插入一个新元素x,插入后数组仍递增有序;(4)将数组元素逆置(即:将a1与an交换,将a2与an-1交换,……)。要求:每个功能用函数实现。【分析】#define N 10 /N个数/int a[N+1]; //由于需插入一个新元素,故数组长度定义为N+1可以定义如下几个子函数实现每个功能:void input(int a[], int n ) // 按从小到大的顺序输入n个数存入数组a中。void output(int a[], int n) // 输出数组。void insert(int a[], int x, int n) // 插入一个新元素x,插入后数组仍递增有序void invert(int a[], int n) // 将数组元素逆置


#include <stdio.h>
#include <string.h>

#define N 10

// 按从小到大的顺序输入n个数存入数组a中
void input(int a[], int n)
{
    printf("请输入数据:");

    for(int i = 0 ; i < n ; i++)
    {
        scanf("%d", &a[i]);     //获取输入数据
    }

}
// 输出数组
void output(int a[], int n)
{

    for(int i = 0 ; i < n ; i++)
    {
        printf("%d ", a[i]);     //获取输入数据
    }
    
    printf("\n");
}
// 插入一个新元素x,插入后数组仍递增有序
void insert(int a[], int x, int n)
{
    int i = 0;
    
    for(i = 0 ; i < n ; i++)
    {
        //判断插入元素是否小于数据当前元素
        if(x < a[i])
        {
            memmove(a + i + 1, a + i, n - i);       //大于插入元素的全部后移
            break;                                  //退出循环
        }

    }
    
    a[i] = x;       //写入插入元素
}
// 将数组元素逆置
void invert(int a[], int n)
{
    int temp = 0;       //临时存放变量

    //逆置算法
    for(int i = 0 ; i < n >> 1 ; i++)
    {
        temp = a[i];            //暂存低地址数据
        a[i] = a[n - i -1];     //高地址数据写入低地址
        a[n - i -1] = temp;     //低地址数据写入高地址
    }

}


int main()
{
    int a[N + 1] = {0};
    int x = 0;

    input(a, N);            //输入数据
    output(a, N);           //输出数据
    insert(a, x, N);        //插入元素
    output(a, N + 1);       //输出数据
    invert(a, N + 1);       //逆置元素
    output(a, N + 1);       //输出数据
}