#include<iostream> using namespace std; /*有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2. 实现一个函数,把A2中的所有数字插入到A!中并且所有的数字是排序的。*/ /*思路:先计算出两个数组中元素的总个数,然后从尾到头比较array1和array2中的数字, 并把较大的数字复制到array1的合适位置。*/ //num1和num2分别表示array1和array2中数字的个数, length表示array1的长度。 void Merge(int array1[], int array2[], int length, int num1, int num2) { int num = num1 + num2; if(num > length) return; if(array1 == NULL || array2 == NULL || length < 0) return; int i = num1 - 1; int j = num2 - 1; int k = num - 1; while(i >= 0 && j >= 0) { if(array1[i] > array2[j]) { array1[k--] = array1[i--]; } else array1[k--] = array2[j--]; } if(i >= 0) { while(i >= 0) array1[k--] = array1[i--]; } if(j >= 0) { while(j >= 0) array1[k--] = array2[j--]; } } /*判断两个数组是否相等*/ bool isSame(int a[], int b[], int sum1, int sum2) { if(sum1 != sum2) return false; if(a == NULL || b == NULL) return false; for(int k = 0; k < sum1; k++) if(a[k] != b[k]) return false; return true; } /*测试代码*/ void Test(char* testName, int array1[], int array2[], int length, int num1, int num2, int expect[], int k) { if(testName != NULL) cout << testName << "begins"<< endl; Merge(array1, array2, length, num1, num2); /*打印出array1中的元素*/ cout << "array1:"; for(int i = 0; i < num1 + num2; i++) cout <<array1[i] << " "; cout << endl; /*打印出expect中的元素*/ cout << "expect:"; for(int j = 0; j < k; j++) cout << expect[j] << " "; cout << endl; if(isSame(array1, expect, num1 + num2, k)) cout << "passed." << endl; else cout << "failed." << endl; } /*一个是奇数数组,一个是偶数数组*/ void Test1() { int array1[20] = {1,3,5}; int array2[] = {2,4,6}; int expect[] = {1,2,3,4,5,6}; Test("Test1", array1, array2, 20, 3,3,expect, 6); } /*一个数组中的数比另一个数组中的数小,一个数组中的数比另一个数组中的数大*/ void Test2() { int array1[20] = {1,2,3}; int array2[] = {4,5,6}; int expect[] = {1,2,3,4,5,6}; Test("Test2", array1, array2, 20, 3,3,expect, 6); } /*其中第一个数组是空数组,*/ void Test3() { int array1[20] = {0}; int array2[] = {1,2,3}; int expect[] = {1,2,3}; Test("Test3", array1, array2, 20, 0,3,expect, 3); } /*其中第二个数组是空数组,*/ void Test4() { int array1[20] = {1,2,3}; int array2[] = {0}; int expect[] = {1,2,3}; Test("Test4", array1, array2, 20, 3,0,expect, 3); } /*其中两个数组是空数组,*/ void Test5() { int array1[20] = {0}; int array2[] = {0};// int expect[] = {0}; Test("Test5", array1, array2, 20, 0,0,expect, 0); } int main() { Test1(); Test2(); Test3(); Test4(); Test5(); return 0; }
输出结果为: