標籤:
#include <iostream>using namespace std;int sortedInsert(int A[],int lenA,int B[],int lenB){ if(B == NULL) return lenA; int len = lenA + lenB; int indexNew = len-1; int indexA = lenA-1; int indexB = lenB-1; while( indexA>=0 && indexB>=0 ) { if(A[indexA] > B[indexB]) { A[indexNew] = A[indexA--]; }else{ A[indexNew] = B[indexB--]; } // printf("%d \n",A[indexNew]); //printf("here lenA = %d,lenB = %d\n",indexA,indexB) ; indexNew --; } //下面處理剩餘的那部分; //printf("here lenA = %d,lenB = %d\n",indexA,indexB) ; while(indexA>=0) { // A[indexNew] = A[indexA]; //printf("%d ",A[indexNew]); indexNew--; indexA -- ; } //printf("OK"); while(indexB>=0) { A[indexNew] = B[indexB]; //printf("%d ",A[indexNew]); indexNew--; indexB -- ; } return lenA+lenB;}int intCmp(int * A ,int lenA,int * expected ,int lenExpected){ if(lenA != lenExpected) return -1; for(int i = 0;i<lenA;i++) if(A[i]!=expected[i]) { //printf("%d %d %d\n",i,A[i],expected[i]); return -1; } return 0;}void test(char * testNumber,int *A,int lenA,int *B,int lenB,int* expected,int lenExpected){ lenA = sortedInsert(A,lenA,B,lenB); printf("%s ",testNumber); if(intCmp(A,lenA,expected,lenExpected) == 0 ) printf("passed\n"); else printf("failed\n");}void test1()//B插在A的後頭; { int A[100]={1,3,5,7,9}; int B[]={2,4,6,8}; //sortedInsert(A,5,B,4); int expected[]={1,2,3,4,5,6,7,8,9}; test("test1",A,5,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));} void test2()//B要插在A的前頭; { int A[100]={6,7,8,9}; int B[]={1,2,3,4,5}; //sortedInsert(A,5,B,4); int expected[]={1,2,3,4,5,6,7,8,9}; test("test2",A,4,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));} void test3()//A沒有內容 { int A[100]={}; int B[]={1,3,5,7,9}; //sortedInsert(A,5,B,4); int expected[]={1,3,5,7,9}; test("test3",A,0,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));} void test4()//B沒有內容 { int A[100]={1,3,5,7,9}; int B[]={}; //sortedInsert(A,5,B,4); int expected[]={1,3,5,7,9}; test("test4",A,5,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));} void test5()//A,B都沒有內容 { int A[100]={}; int B[]={}; //sortedInsert(A,5,B,4); int expected[]={}; test("test5",A,0,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));} void test6()//B為空白指標 { int A[100]={1,3,5,7,9}; int * B = NULL; //sortedInsert(A,5,B,4); int expected[]={1,3,5,7,9}; test("test6",A,5,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));} int main(){ test1(); test2(); test3(); test4(); test5(); test6(); return 0;}
合并兩個數組(包括字串)時,如果從前往後複製每個數字(或字元)需要重複移動數字(或字元)多次,那麼我們可以考慮從後往前複製,這樣就能減少移動的次數,從而提高效率。
合并兩個數組