合并数组
2014-03-01 16:12
399 查看
/******************************************************** 题目:有两个排序的数组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; }
/*合并两个数组(包括字符串)时,如果从前往后赋值每个数字(或字符)需要
移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移
动的次数,从而提高效率*/
联系上一题:/article/1567602.html
相关文章推荐
- 配置gitlab环境实现代码管理及Web Hook测试和ldap认证 推荐
- hbase中表的数据时怎么存储的
- 读算法导论遇到的几个问题
- 数据类型、运算符与表达式
- 消费者权益法规的精神
- subclipse安装版本问题
- 对称二叉树
- hdu1272
- MyBatis动态连接数据库,动态传入数据库参数
- UML之用例图
- jquery 版本的动态编辑表格 三
- 利用OpenCV提取HOG特征需要了解的参数
- UITableView获取cell的indexPath
- sql server 2008 两个字段组合成为唯一字段
- 11个SEO最常见问题解答
- NYOJ597 完数?
- second_searcher
- 分治策略
- 数据库链接字符串中的细节(integrated security=true;MultipleActiveResultSets=true)
- NYOJ597 完数?