C语言合并两个降序数组,使合并后的数组仍然保持降序排列
时间: 2023-10-20 13:14:47 浏览: 254
合并排序,用c语言实现
4星 · 用户满意度95%
可以使用双指针的方式来合并两个降序数组,具体步骤如下:
1. 定义两个指针分别指向两个数组的末尾,初始化为数组长度减一。
2. 定义一个新数组,长度为两个数组长度之和。
3. 从新数组的最后一个位置开始,比较两个指针所指的元素,将较大的元素赋值给新数组的当前位置,并将指针向前移动一位。重复这个过程直到任意一个指针移动到数组的开头。
4. 如果有一个数组还有剩余元素,将剩余元素依次复制到新数组的前面。
下面是具体的代码实现:
```c
#include <stdio.h>
void merge(int arr1[], int len1, int arr2[], int len2, int result[]) {
int i = len1 - 1; // arr1的指针
int j = len2 - 1; // arr2的指针
int k = len1 + len2 - 1; // result的指针
while (i >= 0 && j >= 0) {
if (arr1[i] > arr2[j]) {
result[k--] = arr1[i--];
} else {
result[k--] = arr2[j--];
}
}
while (i >= 0) {
result[k--] = arr1[i--];
}
while (j >= 0) {
result[k--] = arr2[j--];
}
}
int main() {
int arr1[] = {6, 4, 2};
int len1 = sizeof(arr1) / sizeof(int);
int arr2[] = {5, 3, 1};
int len2 = sizeof(arr2) / sizeof(int);
int result[len1 + len2];
merge(arr1, len1, arr2, len2, result);
printf("合并后的数组为:");
for (int i = 0; i < len1 + len2; i++) {
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
```
输出结果为:合并后的数组为:6 5 4 3 2 1
可以看到,合并后的数组仍然保持降序排列。
阅读全文