现在我们需要将以下两组数列合并
数组arr1:1,3,7,9,22
数组arr2:2,8,10,17,33,44
然后以这样的顺序输出:1,2,3,7,8,9,10,17,22,33,44
那我们先要建立arr1和arr2,为了让这两个数组在未来使用的更方便能同时排序更多的数字,我们将其内存设置为1000,这样这个数组就能存放1000个数字了
int arr1[1000] = {0};
int arr2[1000] = {0};
然后我们得到arr1和arr2的数字,我们需要建立两个变量来存放数组中数字的个数,然后再将得到的数字输入进去
int arr1[1000] = { 0 };
int arr2[1000] = { 0 };
int n, m;
scanf("%d %d", &n, &m);
int i = 0;
//为arr1存放数字
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
//为arr2存放数字
for (i = 0; i < m; i++)
{
scanf("%d", &arr2[i]);
}
接下里就是合并这两个数组了,其实就是让arr1[0]和arr2[0]相互比较,将较小的那个数打印出来,假设arr1[0]比较小那么打印arr1[0],然后让arr1的下标加一,继续让arr1[1]和arr2[0]比较,以此类推。
//合并
int i = 0;//arr1的下标
int j = 0;//arr2的下标
while()
{
if (arr1[i] < arr2[j])
{
printf("%d", arr1[i]);//打印较小的
i++;//下标加一
}
else
{
printf("%d", arr2[j]);//打印较小的
j++;//下标加一
}
}
代码写到这,现在这道题最大的问题来了,那arr1和arr2中存放的数字个数是不一样的,那最后多余的数字没法进行比较那怎么办呢?
顺带一提,那么在合法范围内的比较条件是不是也有了 i < n && j < m
//合法范围外直接打印剩余数
while (i < n)//如果走进这个循环说明arr2已经提前走完
{
printf("%d", arr1[i]);
i++;
}
while (j < m)//如果走进这个循环说明arr1已经提前走完
{
printf("%d", arr2[j]);
j++;
}
这样我们就完成了我们的代码,稍微加点提示语句让自己使用的更赏心悦目方便理解,大家可以试着调试一下试试看,说不定感触会更深刻
//有序数列合并
int main()
{
int arr1[1000] = { 0 };
int arr2[1000] = { 0 };
int n, m;
printf("请输入您想在arr1和arr2中存放几个数字:");
scanf("%d %d", &n, &m);
int i = 0;
printf("arr1请输入:");
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
printf("arr2请输入:");
for (i = 0; i < m; i++)
{
scanf("%d", &arr2[i]);
}
i = 0;//不能多次初始化
int j = 0;
while(i < n && j < m)//合法比较的条件
{
if (arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else
{
printf("%d ", arr2[j]);
j++;
}
}
while (i < n)
{
printf("%d ", arr1[i]);
i++;
}
while (j < m)
{
printf("%d ", arr2[j]);
j++;
}
return 0;
}
累了饿了喝口茶,换个坐姿,点个赞~