Input
输入两行,第一行输入5个有序数,第二行输入若干个插入的数,以-1结束。
Output
输出仅一行,输出所有数,用空格隔开。
Sample Input
3 5 7 9 11
15 0 8 -1
Sample Output
0 3 5 7 8 9 11 15
问题分析
本题要求在数组中插入数字,数组本身是有序的,多次插入数字就是多次比较插入数字和数组内数字的大小,如果比较发现待插入的数字比前一项大又比后一项小,就把数组的每一个元素后移,再把数字插入即可。
代码实现
#include <stdio.h>
int main()
{
int i = 0;
int num = 0;
char arr[999];
int t = 0;
int lenth = 5;
for (i = 0; i <= 4; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &num);
while (num != -1)
{
arr[lenth] = num;
for (i = lenth; i >= 1; i--)
{
if (arr[i] < arr[i - 1])//后一项前移
{
t = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = t;
}
}
lenth++;
scanf("%d", &num);
}
for (i = 0; i <= lenth - 1; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
注意
- 已知数组数字,使用for循环输入
- 多次插入数字,因为不知道插入数字的个数,因此使用for循环
- 可以选择从后往前||从前往后比较,实际上只需要比较是否符合比前一项小||比后一项大的条件,若符合,则交换数字的顺序。外层有for循环多次进行,就是说循环在不停判断两个数字的大小,并不断前移