两个递增有序的数组合并用C语言做
时间: 2023-08-10 18:32:57 浏览: 56
同样可以使用归并排序的思想来合并两个递增有序的数组。具体步骤如下:
1. 定义两个指针i和j,分别指向两个数组的起始位置;
2. 定义一个新的数组result,用于存放合并后的结果;
3. 比较数组1和数组2中i和j位置上的元素大小,将较小的元素添加到result数组中,并将指针i或j向后移动一位;
4. 重复步骤3,直到任意一个数组的元素全部添加到result数组中;
5. 将另一个数组中剩余的元素添加到result数组中;
6. 返回result数组。
以下是C语言实现代码:
```c
#include <stdio.h>
int* merge_sorted_arrays(int arr1[], int arr2[], int m, int n) {
int i = 0, j = 0, k = 0;
int* result = (int*)malloc((m + n) * sizeof(int));
while (i < m && j < n) {
if (arr1[i] <= arr2[j]) {
result[k] = arr1[i];
i++;
} else {
result[k] = arr2[j];
j++;
}
k++;
}
while (i < m) {
result[k] = arr1[i];
i++;
k++;
}
while (j < n) {
result[k] = arr2[j];
j++;
k++;
}
return result;
}
int main() {
int arr1[] = {1, 3, 5, 7, 9};
int arr2[] = {2, 4, 6, 8, 10};
int m = sizeof(arr1) / sizeof(arr1[0]);
int n = sizeof(arr2) / sizeof(arr2[0]);
int* result = merge_sorted_arrays(arr1, arr2, m, n);
for (int i = 0; i < m + n; i++) {
printf("%d ", result[i]);
}
free(result);
return 0;
}
```
注意,以上实现假设两个输入数组已经是递增有序的。如果不是,则需要在合并前先对它们进行排序。另外,需要记得在函数结束时释放动态分配的数组空间,避免内存泄漏。