4、已知整型数组a和b的长度分别为M和N (M、N已知),且均已升序排序,编写程序将这两个有序数组合并成一个新的升序数组。 (提示:键盘输入数组元素时,已按升序顺序键入,无须再排序)用C语言完成
时间: 2024-12-14 09:17:15 浏览: 44
在C语言中,你可以使用双指针法来合并两个已排序的整型数组。这里是一个简单的示例程序:
```c
#include <stdio.h>
void merge_arrays(int a[], int b[], int M, int N, int result[]) {
int i = 0, j = 0, k = 0; // 定义指针i, j分别指向a和b数组,k指向结果数组
while (i < M && j < N) { // 当两个数组都有剩余元素时
if (a[i] <= b[j]) { // 如果a[i]小于等于b[j]
result[k++] = a[i]; // 把a[i]放入结果数组
i++; // 移动a的指针
} else { // 否则,如果a[i]大于b[j]
result[k++] = b[j]; // 把b[j]放入结果数组
j++; // 移动b的指针
}
}
// 处理数组a或b可能有剩余的情况
while (i < M) {
result[k++] = a[i];
i++;
}
while (j < N) {
result[k++] = b[j];
j++;
}
}
int main() {
int M, N;
printf("请输入数组a的长度(M): ");
scanf("%d", &M);
printf("请输入数组b的长度(N): ");
scanf("%d", &N);
int a[M], b[N], result[2 * M + N]; // 结果数组足够大以存放两者的所有元素
// 用户输入数组a和b
printf("请输入数组a的元素: ");
for (int i = 0; i < M; i++) {
scanf("%d", &a[i]);
}
printf("请输入数组b的元素: ");
for (int i = 0; i < N; i++) {
scanf("%d", &b[i]);
}
merge_arrays(a, b, M, N, result); // 调用合并函数
printf("合并后的升序数组: ");
for (int i = 0; i < 2 * M + N; i++) {
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
```
当你运行这个程序并按照提示输入数组的长度和元素时,它会生成一个新的升序数组,包含了来自数组a和数组b的所有元素。
阅读全文
相关推荐
















