`
xitonga
  • 浏览: 588925 次
文章分类
社区版块
存档分类
最新评论

合并数组

 
阅读更多
/********************************************************
题目:有两个排序的数组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

分享到:
评论

相关推荐

    合并数组中相同的项

    可以用来合并数组中相同的项,生成新的数组,使用了全景静态变量实现,其他数据类型可以参照实现

    合并数组并且转为有序去重集合

    合并数组并且转为有序去重集合,我看到很多资源博客,百度都弄的很繁琐,所以自己总结描述了一下

    JavaScript 实现合并数组并排序

    JavaScript 实现合并数组并排序

    易语言合并数组的方法

    在本篇内容里小编给大家分享了关于易语言合并数组的方法和技巧,有需要的朋友们可以学习下。

    C语言实现在数组A上有序合并数组B的方法

    主要介绍了C语言实现在数组A上有序合并数组B的方法,包含了数组操作的完整实现过程以及相应的代码分析与改进,具有不错的借鉴价值,需要的朋友可以参考下

    Java数组+数组排序+数组复制+最大最小值+合并数组+数组升降序排序+数组查找

    Java数组: Java数组排序:冒泡排序、选择排序 、插入排序 、快速排序、希尔排序、堆排序和归并排序 三种Java数组复制方法 ...四种合并Java数组方法 Java数组升降序排序 Java数组查找:二分查找、顺序查找、插值查找法

    JS合并数组的几种方法及优劣比较

    主要介绍了JS合并数组的几种方法及优劣比较,本文讲解了concat、循环插入、reduce等方法合并数组,并对它们的优劣做了比较,需要的朋友可以参考下

    PHP合并数组的2种方法小结

    在此前合并数组我一直用的是array_merge()这个函数,但最近我在换工作的时候遇到一道合并数组的面试题,我当时想的是将两个数组先转化为字符串,合并后再转化为数组输出,面试官说这个思路不太对,完了bulabula讲了...

    js操作两个json数组合并、去重,以及删除某一项元素

    两个json数组合并去重,以及删除某一项元素 let ha = [ {id:'H',name:'3'}, {id:'A',name:'6'}, {id:'B',name:'14'}, ...// 合并两个json数组,并去重; ha= Object.assign([], ha, hb); console.log('ha

    PHP合并数组函数array_merge用法分析

    合并数组是把一个数组追加到另一个数组中,主要应用array_merge()函数实现 语法如下: array array_merge(array array1,array array2[,array...]); 注: 在合并时,如果输入的数组中有相同的字符串键名,则后面的值...

    php合并数组并保留键值的实现方法

    php合并数组,一般会使用array_merge方法。 array_merge — 合并一个或多个数组 array array_merge ( array $array1 [, array $... ] ) array_merge 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个...

    VB 数组做参数合并排序

    VB 数组做参数合并排序 VB 数组做参数合并排序

    php合并数组中相同元素的方法

    本文实例讲述了php合并数组中相同元素的方法。分享给大家供大家参考。具体如下: 关于重复数组的删除我们都介绍过N种方法了,今天这个例子有点不同就是 删除数组中相同的元素,只保留一个相同元素,具体实例代码如下...

    js合并数组这一篇就够了

    合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。 实质上是一个浅拷贝,将原始数组复制一个副本到新数组中。 let a = [1, 2, 3]; let b = [fun, hello, ok]; let c =a.concat(b); console.log(c);...

    JavaScript中合并数组的N种方法

    我们将使用不同的方法结合/合并两个JS数组,以及讨论每个方法的优点/缺点。 让我们先考虑下面这情况: 代码如下: var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; var b = [ “foo”, “bar”, “baz”, “bam”, “bun”...

    基于php实现随机合并数组并排序(原排序)

    其中有这样一个需求要实现,原有帖子列表A,现在需要在A中推广新业务B,那么需要在A列表中1:1混合B中的数据,随机混合,但是需要保持A和B两列原来的数据排序,本篇文章给大家介绍基于php实现随机合并数组并排序(原...

    详解Java合并数组的两种实现方式

    主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    js代码-js concat 数组合并 数组连接

    js代码-js concat 数组合并 数组连接

Global site tag (gtag.js) - Google Analytics