题解 | #有序序列合并#
有序序列合并
https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897
#include <stdio.h>
#include <stdlib.h>
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
int* arr1 = (int*)malloc(sizeof(int) * a);
int* arr2 = (int*)malloc(sizeof(int) * b);
int* arr3 = (int*)malloc(sizeof(int) * (b + a));
if (arr1 == NULL || arr2 == NULL || arr3 == NULL) {
printf("内存分配失败\n");
return -1;
}
int* p1 = arr1;
int* p2 = arr2;
int* p3 = arr3;
for (int i = 0; i < a; i++)
scanf("%d", (p1++));
for (int i = 0; i < b; i++)
scanf("%d", (p2++));
p1 = arr1; // 重置指针位置
p2 = arr2; // 重置指针位置
while (p1 - arr1 < a && p2 - arr2 < b) {
if (*p1 <= *p2)
*(p3++) = *(p1++);
else if (*p1 > *p2)
*(p3++) = *(p2++);
}
while (p1 - arr1 < a)
*(p3++) = *(p1++);
while (p2 - arr2 < b)
*(p3++) = *(p2++);
p3 = arr3;
for (int j = 0; j < a + b; j++)
printf("%d ", *(p3++));
free(arr1);
free(arr2);
free(arr3);
}
return 0;
}

查看28道真题和解析