数列有序C语言插入操作

一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序.

```c
#include<stdio.h>
int main()
{
int a[20];
int n,i,m,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[n]);
}
scanf("%d",&m);
for(i=0;i<n;i++)
{
if(m<=a[i])break;
}
j=i;
for(i=n;i>j;i--)
{
a[i]=a[i-1];
}
a[i]=m;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("%d",a[n]);
return 0;
}

```唉,为啥运行结果不正确啊。拜托大神指点一下。

scanf("%d",&a[n]); 输入语句修改为: scanf("%d",&a[i]);

改正如下


#include<stdio.h>
int main()
{
    int a[20];
    int n, i, m, j;
    scanf_s("%d", &n);
    for (i = 0; i < n-1; i++)          // i < n改成i < n-1。总的列表有n个数,你要插入一个,那么初始的列表应该只有n-1个数,否则你插入之后,最后一个数据将丢失
    {
        scanf_s("%d", &a[i]);         //a[n]改成a[i],这里应该是书写错误
    }
    scanf_s("%d", &m);
    for (i = 0; i < n-1; i++)        // i < n改成i < n-1。
    {
        if (m <= a[i])break;
    }
    j = i;
    for (i = n; i > j; i--)
    {
        a[i] = a[i - 1];
    }
    a[i] = m;
    for (i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }
    //printf("%d", a[n]);        //注释掉这行,a[n]数组越界了,最大下表是a[n-1],因为是从0开始算的。
    return 0;
}