给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。用C编程
时间: 2024-09-06 20:08:06 浏览: 21
在C语言中,你可以使用双指针技巧来合并两个已排序的数组`nums1`和`nums2`。这里是一个基本的算法步骤:
1. 定义两个指针,一个指向`nums1`的开始,另一个指向`nums2`的开始,分别记作`i`和`j`。
2. 创建一个新的数组`merged_nums`来存储合并后的结果。
3. 当`i`小于`nums1`的长度并且`j`也小于`nums2`的长度时,比较`nums1[i]`和`nums2[j]`,选择较小的那个放入`merged_nums`,并将对应的指针向后移动一位。
4. 如果`nums1[i]`大于等于`nums2[j]`,直接将`nums1[i++]`复制到`merged_nums`,然后继续比较下一个元素。
5. 当其中一个数组遍历完之后,将另一个剩余未添加的部分直接复制到`merged_nums`的剩余位置。
这是一个简单的示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
void merge_sorted_arrays(int* nums1, int* nums2, int m, int n, int* merged_nums) {
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (nums1[i] <= nums2[j]) {
merged_nums[k++] = nums1[i++];
} else {
merged_nums[k++] = nums2[j++];
}
}
// 将剩余部分复制到新数组
while (i < m) {
merged_nums[k++] = nums1[i++];
}
while (j < n) {
merged_nums[k++] = nums2[j++];
}
}
int main() {
int nums1[] = {1, 4, 5};
int nums2[] = {2, 3, 6};
int m = sizeof(nums1) / sizeof(nums1[0]);
int n = sizeof(nums2) / sizeof(nums2[0]);
int merged_size = m + n;
int* merged_nums = malloc(merged_size * sizeof(int));
merge_sorted_arrays(nums1, nums2, m, n, merged_nums);
for (int i = 0; i < merged_size; i++) {
printf("%d ", merged_nums[i]);
}
free(merged_nums);
return 0;
}
```
运行这个程序,你会得到合并后的非递减数组:`1 2 3 4 5 6`。