用c语言编写程序,已知整型数组a和b的长度分别为M和N(M和N已知),且均已升序排序,用c语言编写程序将这两个有序数组合并成一个新的升序数组(提示:键盘输入数组元素时,已按升序顺序输入,无须再排序)
时间: 2024-10-16 13:19:50 浏览: 84
要合并两个升序排列的整数数组 `a` 和 `b`,你可以创建一个新数组 `combined`,然后按照它们的元素值逐个添加。由于数组已排序,我们不需要复杂的比较算法,只需简单地遍历两个数组,并将较小的那个元素添加到结果数组中。以下是C语言的一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc函数
#define MAX(a, b) ((a) > (b)) ? (a) : (b) // 用于获取较大的值
int* mergeArrays(int* a, int* b, int m, int n) {
int* combined = (int*)malloc((m + n) * sizeof(int)); // 动态分配内存
if (!combined) {
printf("Memory allocation failed.\n");
return NULL;
}
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (a[i] <= b[j]) {
combined[k++] = a[i++];
} else {
combined[k++] = b[j++];
}
}
// 将剩余元素复制到结果数组
while (i < m) {
combined[k++] = a[i++];
}
while (j < n) {
combined[k++] = b[j++];
}
return combined;
}
int main() {
int M, N;
printf("Enter the length of array A: ");
scanf("%d", &M);
printf("Enter the length of array B: ");
scanf("%d", &N);
int* a = malloc(M * sizeof(int));
int* b = malloc(N * sizeof(int));
printf("Enter elements of array A:\n");
for (int i = 0; i < M; i++) {
scanf("%d", &a[i]);
}
printf("Enter elements of array B:\n");
for (int i = 0; i < N; i++) {
scanf("%d", &b[i]);
}
int* mergedArray = mergeArrays(a, b, M, N);
if (mergedArray) {
printf("The merged sorted array is: ");
for (int i = 0; i < M + N; i++) {
printf("%d ", mergedArray[i]);
}
free(mergedArray); // 释放内存
printf("\n");
} else {
printf("Failed to create merged array.\n");
}
free(a);
free(b);
return 0;
}
```
在这个程序中,我们首先通过用户输入确定每个数组的长度,然后读取元素并合并。注意,最后别忘了释放动态分配的内存。
阅读全文