从前往后找插入的位置,当插入的数是小于等于当前数组位置的数,那么这个点就是插入点

插入之前需要把插入位置及之后的数都要往后移一格,并且只能从后面开始移动,从前移动会覆盖后面的数

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n = 0;
scanf("%d", &n);
//申请n+1个空间大小的数组
int* a = (int*)malloc(sizeof(int) * (n + 1));

for(int i = 0; i < n; i++)
{
    scanf("%d", &a[i]);
}

//插入的数
int m;
scanf("%d", &m);
int i = 0;
//找出要在那个位置插入
for(i = 0; i < n + 1; i++)
{
    if(m <= a[i])
        break;
}

//把这个位置之后的数据往后移一格,n是数组最后一个元素的下标
int j =0;
for(j = n; j > i; j--)
{
    a[j] = a[j - 1];
}
//插入m到数组,跳出循环是j == i
a[j] = m;

//打印数组
for(i = 0; i < n + 1; i++)
{
    printf("%d ", a[i]);
}

return 0;

}