题目:有两个有序数组arr1[]和arr2[],将它们合并成数组arr[],要求arr[]也是有序数组。
思路:新定义一个数组arr,最大长度为100,从两数组最左边开始比起,把小的放入新集合,然后相应的index下标往下走,每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个数组遍历结束,将另一个数组剩余部分链接。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define max 100//定义合并数组的最大长度
int arr[max];//定义合并的数组
int main() {
int arr1[] = { 1,5,9,15,31,46,78,110 };
int arr2[] = { 4,5,6,11,13,17,65,88,450,740,888,900 };
//求出数组arr1的长度sz1和arr2的长度sz2
int sz1 = sizeof(arr1) / sizeof(arr1[0]);
int sz2 = sizeof(arr2) / sizeof(arr2[0]);
//定义合并数组的元素个数
int count = sz1 + sz2;
//定义数组arr1的下表index1和arr2的下标index2
int index1 = 0;
int index2 = 0;
for (int i = 0;i < count;++i) {
if (index1 < sz1 && index2 < sz2) {//若两个数组均未遍历完
if (arr1[index1] <= arr2[index2]) {
arr[i] = arr1[index1];
index1++;
}
else {
arr[i] = arr2[index2];
index2++;
}
}
else if (index1 < sz1) {//若arr2已经遍历完了
arr[i] = arr1[index1];
index1++;
}
else if (index2 < sz2) {//若arr1已经遍历完了
arr[i] = arr2[index2];
index2++;
}
}
//打印合并出来的数组
for (int i = 0;i < count;++i) {
printf("%d ", arr[i]);
}
return 0;
}
结果: