输入两个数组,合并并且从小到大输出(明天就考试了,各位老哥帮帮忙)
题目描述
编写程序,从控制台读入2组,每组各5个整数,每组数中的数都是按照从小到大排列的,将这2组数合并成一个10长度的数组,该数组中数据从小到大排列。
输入格式:
2组整数,每组5个整数
输出格式:
2组整数从小到大输出
输入样例复制
2 4 6 8 10
1 3 5 7 9
输出样例复制
1 2 3 4 5 6 7 8 9 10
输入两个数组,合并并且从小到大输出(明天就考试了,各位老哥帮帮忙)
题目描述
编写程序,从控制台读入2组,每组各5个整数,每组数中的数都是按照从小到大排列的,将这2组数合并成一个10长度的数组,该数组中数据从小到大排列。
输入格式:
2组整数,每组5个整数
输出格式:
2组整数从小到大输出
输入样例复制
2 4 6 8 10
1 3 5 7 9
输出样例复制
1 2 3 4 5 6 7 8 9 10
#include <stdio.h>
void merge(int *nums1, int m, int *nums2, int n);
int main()
{
int nums1[10], nums2[5], i, j;
for (i = 0; i < 5; i++)
{
scanf("%d", &nums1[i]);
}
for (i = 0; i < 5; i++)
{
scanf("%d", &nums2[i]);
}
merge(nums1, 5, nums2, 5);
for (i = 0; i < 10; i++)
{
printf("%d ", nums1[i]);
}
return 0;
}
void merge(int *nums1, int m, int *nums2, int n)
{
int p1 = 0, p2 = 0;
int sorted[m + n];
int cur;
while (p1 < m || p2 < n)
{
if (p1 == m)
{
cur = nums2[p2++];
}
else if (p2 == n)
{
cur = nums1[p1++];
}
else if (nums1[p1] < nums2[p2])
{
cur = nums1[p1++];
}
else
{
cur = nums2[p2++];
}
sorted[p1 + p2 - 1] = cur;
}
for (int i = 0; i != m + n; ++i)
{
nums1[i] = sorted[i];
}
}