数组插入

本文最后更新于:2 months ago

我愿称之为,我自己太菜。

1
2
3
4
5
6
7
8
9
10
【问题描述】:有一个已经排好序的正数数组(从小到大,个数在2至15个)。现输入一个数,要求按原来的规律将它插入数组中。
【输入形式】:输入两行。
第一行为已经排好序的正数数组,最后一个数为0,表示这一行的结束,0不属于正数数组。
第二行输入一个整数。
【输出形式】:输出插入后的数组。各个元素间以空格分隔。
【样例输入】
1 2 3 4 11 0
5
【样例输出】
1 2 3 4 5 11

思路

首先要找出在已有数列中,原有数组中第一个比插入值大的数字(标记为num[m])。接着将从num[m]开始的每一个值都向后平移,将插入值插入在原先num[m]的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
int main() {
int num[15] = {0};
int n, i, j, k;
for (i = 0; i < 15; i++) {
scanf("%d", &n);
if (n == 0) {
k = i;
break;
} else {
num[i] = n;
}
}
scanf("%d", &n);
int m;
for (i = 0; i < k; i++) {
if (num[i] > n) {
m = i; //标记num[m]
break;
}
}
for (i = k; i != m; i--) {
num[i] = num[i-1];
}
num[m] = n;
for (i = 0; i < k+1; i++) {
if (num[i] != 0) {
printf("%d ", num[i]);
}
}
return 0;
}

Return 0;

这道题的难点在于要能够清晰的理解数组的标号规则。
人是从1开始数,计算机是从0开始。尤其此题又涉及大量的循环控制和标记。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!