合并兩個數組

來源:互聯網
上載者:User

標籤:

#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;}

 

 合并兩個數組(包括字串)時,如果從前往後複製每個數字(或字元)需要重複移動數字(或字元)多次,那麼我們可以考慮從後往前複製,這樣就能減少移動的次數,從而提高效率。

 

合并兩個數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.