用C语言编译一下已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递增有序排列的顺序表(允许表中含有值相同的元素)。 输入格式: 输入有4行。 第1行是一个正整数m,表示第2行有m个整数,这些整数构成一个非降序序列,每个整数之间以空格隔开。第3行是一个正整数n,表示第4行有n个整数,这些整数也构成一个非降序序列,每个整数之间以空格隔开。 输出格式: 把第2行的m个整数和第4行的n个整数合并成一个非降序序列,输出这个整数序列。每个数之间隔1个空格。 输入样例: 在这里给出一组输入。例如: 8 1 3 5 6 7 7 8 9 4 3 8 10 17 输出样例: 在这里给出相应的输出。例如: 1 3 3 5 6 7 7 8 8 9 10 17
时间: 2023-06-18 09:07:32 浏览: 94
已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C。
5星 · 资源好评率100%
```c
#include <stdio.h>
#define MAXSIZE 100
void merge(int a[], int m, int b[], int n, int c[]) {
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (a[i] <= b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
while (i < m) {
c[k++] = a[i++];
}
while (j < n) {
c[k++] = b[j++];
}
}
int main() {
int m, n, a[MAXSIZE], b[MAXSIZE], c[MAXSIZE * 2];
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
merge(a, m, b, n, c);
for (int i = 0; i < m + n; i++) {
printf("%d ", c[i]);
}
return 0;
}
```
阅读全文