两个数组合并

 好久没写c/c++程序了,手脑都迟钝了老些,希望自己能够通过没日一小题来提高自己,锻炼自己。

今日题目是,“两个已经排好序的数组,合并他们并使他们也排好序”。程序如下:希望高手们来指教。。 

  int * MergeArray(int *a,int len1, int *b,int len2) { int *c = new int(sizeof(int) * (len1 + len2)); int i=0,j=0,k=0; // 比较2个数组大小,并交换 if( len1 < len2) { int *p = a; a = b; b = p; int t = len1; len1 = len2; len2 = t; } while(i != len1) { // 两个数组都没遍历完 if( j != len2) { if(a[i]> b[j]) { c[k] = b[j]; j++; k++; } else if(a[i] < b[j]) { c[k] = a[i]; i++; k++; } else { c[k] = a[i]; c[k++] = b[j]; i++; j++; k++; } } // 添加剩余的数组 else { c[k] = a[i]; i++; k++; } } return c; }   

哈哈,这是我的一个朋友写的,大体思路是一样的。

  int a[] = {1,3,5, 7, 9}; int b[] = {2,4,6}; int a_Num = sizeof(a)/sizeof(a[0]); int b_Num = sizeof(b)/sizeof(b[0]); int *p = (int *)malloc(sizeof(int) * (a_Num + b_Num)); int n = 0; for ( int i = 0, j = 0; ((i < a_Num) && (j < b_Num));) { if ( a[i] < b[j] ) { *(p + n) = a[i]; n++; i++; } else { *(p + n) = b[j]; n++; j++; } } if ( a_Num >= b_Num ) { for ( int i = b_Num; i < a_Num;) { *(p + n) = a[i]; n++; i++; } } else { for ( int i = a_Num; i < b_Num;) { *(p + n) = b[i]; n++; i++; } } for ( int i = 0; i < (a_Num + b_Num); i++) { cout<<*(p + i); }

你可能感兴趣的:(两个数组合并)