/******************************************************** 题目:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余 空间容纳A2。请实现一个函数,把A2中所有数字插入到A1中并且所 有的数字是排序的。 *********************************************************/ //合并数组 #include <stdio.h> void mergaMatrix(int* matrix1,int* matrix2, int lenofmtrx1,int lenofmtrx2,int sizeofmatrix1) { if(sizeofmatrix1 != 0 && matrix1 != NULL && lenofmtrx1 !=0 && matrix2 != NULL && lenofmtrx2 != 0 ) { int* pNewMatrix1 = matrix1 + lenofmtrx1 + lenofmtrx2 -1; int* pMatrix1 = matrix1 + lenofmtrx1 - 1; int* pMatrix2 = matrix2 +lenofmtrx2 - 1; while(pMatrix1 >= matrix1 && pMatrix2 >= matrix2) { if(*pMatrix1 >= *pMatrix2) *pNewMatrix1-- = *pMatrix1--; else *pNewMatrix1-- = *pMatrix2--; } while(pMatrix1 >= matrix1) { *pNewMatrix1-- = *pMatrix1--; } while(pMatrix2 >= matrix2) { *pNewMatrix1-- = *pMatrix2--; } } return; } //单元测试 void test(int* matrix1,int* matrix2, int lenofmtrx1,int lenofmtrx2,int sizeofmatrix1) { if(matrix1 != NULL) { for( int i=0; i<lenofmtrx1;i++) { printf("%d ",*(matrix1+i)); } } printf("\n"); if(matrix2 != NULL){ for( int i=0; i<lenofmtrx2;i++) { printf("%d ",*(matrix2+i)); } } printf("\n"); mergaMatrix(matrix1,matrix2,lenofmtrx1,lenofmtrx2,sizeofmatrix1); for( int i=0; i<lenofmtrx1+lenofmtrx2;i++) { printf("%d ",*(matrix1+i)); } printf("\n"); } //一般情况 void test1() { const int sizeofmatrix1 = 100; int lenofmtrx1 = 3; int matrix1[sizeofmatrix1] = {1,3,5}; int lenofmtrx2 = 4; int matrix2[] = {2,4,6,8}; test(matrix1,matrix2,lenofmtrx1,lenofmtrx2,sizeofmatrix1); } //其中一个数组的书全部小于另外一个 void test2() { const int sizeofmatrix1 = 100; int lenofmtrx1 = 3; int matrix1[sizeofmatrix1] = {1,3,5}; int lenofmtrx2 = 4; int matrix2[] = {6,7,8,9}; test(matrix1,matrix2,lenofmtrx1,lenofmtrx2,sizeofmatrix1); } //其中一个为空 void test3() { const int sizeofmatrix1 = 100; int lenofmtrx1 = 3; int matrix1[sizeofmatrix1] = {1,3,5}; test(matrix1,NULL,lenofmtrx1,0,sizeofmatrix1); } //两个都为空 void test4() { const int sizeofmatrix1 = 100; test(NULL,NULL,0,0,sizeofmatrix1); } int main() { test1(); test2(); test3(); test4(); return 0; }
动的次数,从而提高效率*/
联系上一题:http://blog.csdn.net/walkerkalr/article/details/20212511
原文:http://blog.csdn.net/walkerkalr/article/details/20221335