C语言 数组插入

整型数组a是有序数组,请利用int a[10]={0,45,180,399,640,999}定义并部分初始化数组a(数组元素个数>有效数据个数,有效数据即构成有序数组的数据)。用户输入一个整数,将其插入到有序数组中,并输出插入前后数组a的有效元素。

输入/输出示例:
```
输入:
100
输出:
插入前: 45 78 99 140 360
插入后: 45 78 99 100 140 360
```

C语言中,数组是一组连续的相同类型的数据集合。 所以要在数组中插入元素,需要按照以下步骤:

1、找到插入点;

2、将插入点所在元素,及之后的所有元素,都向后移动一个单位;

3、将插入点赋值为要插入的元素。 

以固定位置插入,代码举例如下:

#include <stdio.h>
void insert(int *a, int n, int i, int v)
//将长度为n的数组a, 下标为i的位置插入值为v的元素。 插入后,数组长度为n+1.
{
    int j;
    for(j = n-1; j>=i; j --)//将i及以后的后移一位。 由于是固定位置插入,所以不需要查找插入位置。 
        a[j+1] = a[j];
    a[i] = v;//插入元素。 
}

int main()
{
    int a[5] = {1,3,6,7};/五个元素数组,初始化四个值。
    int i;
    
    insert(a, 4, 2, 5);//将5插入到a[2]位置。 
    for(i = 0; i < 5; i ++)
        printf("%d ", a[i]);//输出结果,为1 3 5 6 7 
    return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-27
#include <stdio.h>

int main()
{
int i;
int a[10] = {0, 4, 10, 100, 200, 321};
int n;

printf("输入需要插入的值: \n");
scanf("%d", &n);

printf("插入前: ");
for (i = 0; i < 10; i++){
printf("%d\t", a[i]);
if (a[i] > a[i + 1])
{
printf("\n");
break;
}
}

for (; i > 0; i--){
if (a[i] > n)
a[i + 1] = a[i];
else{
a[i + 1] = n;
break;
}
}

printf("插入后: ");
for (i = 0; i < 10; i++){
printf("%d\t", a[i]);
if (a[i] > a[i + 1])
{
printf("\n");
break;
}
}

return 0;
}本回答被提问者和网友采纳
相似回答