题目:有两个有序数组arr1[]和arr2[],将它们合并成数组arr[],要求arr[]也是有序数组。
思路:新定义一个数组arr,最大长度为100,从两数组最左边开始比起,把小的放入新集合,然后相应的index下标往下走,每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个数组遍历结束,将另一个数组剩余部分链接。
#define _CRT_SECURE_NO_WARNINGS #include#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; }
结果:



