数组合并,如何把2个数组合并为一个数组
大家好,今天我将为大家揭秘数组合并和如何把2个数组合并为一个数组的奥秘,希望我的分享能给你带来新的启发和知识。
c语言,怎样合并数组
//两个数组合并,参考代码:
#include"stdio.h"
intd=0;//用于记录数组c的大小,和数组c的输出类的一些操作
voidmain()
{
inta[50],b[50],c[100];
inti,j,k;//i表示a数组的大小j表示b数组的大小k用于数组的输出
printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
scanf("%d",&i);
for(k=0;k<i;k++)
scanf("%d",&a[k]);
printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
scanf("%d",&j);
for(k=0;k<j;k++)
scanf("%d",&b[k]);
voidpx(int*p,intn);//声明排序冒泡法
px(a,i);//调用
px(b,j);//调用
voidprin(int*p,intn);//声明数组的输出函数
prin(a,i);
prin(b,j);
voidhb(int*o,int*p,int*q,intm,intn);//声明两个数组的合并函数前提:这俩个数组必须是排好序的
hb(c,a,b,i,j);
prin(c,d);
}
voidpx(int*p,intn)//自定义函数排序冒泡法
{inti,j,t,leap;
for(i=0;i<n-1;i++)//外层循环n-1次,一次循环沉淀一个数
{
leap=0;//leap作为标记,是否两数相换
for(j=0;j<n-i-1;j++)//内循环n-i-1次
{
if(p[j]>p[j+1])//比较两个数
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;//来两个数交换
leap=1;//交换了,标记leap=1
}
}
if(leap==0)break;//经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
}
}
voidprin(int*p,intn)//自定义函数数组输出函数
{
intk,sum=0;
for(k=0;k<n;k++)
{
printf("%d",p[k]);
sum++;
if(sum%10==0)printf("\n");
}
printf("\n");
}
voidhb(int*o,int*p,int*q,intm,intn)//m为p指向数组的大小n为q指向数组的大小指针o指向合并的数组
{
inti=0,j=0,k;//i为p指向数组的大小j为q指向数组的大小
while(1)
{
if(p[i]<q[j])
{
o[d]=p[i];
i++;
d++;
}
else
{
o[d]=q[j];
j++;
d++;
}
if(i==m||j==n)break;
}
if(i==m)
{
for(k=j;k<n;k++)
{
o[d]=q[k];
d++;
}
}
if(j==n)
{
for(k=i;k<m;k++)
{
o[d]=p[k];
d++;
}
}
}
C语言中数组的合并
//两个数组合并,参考代码:
#include"stdio.h"
int d=0;//用于记录数组c的大小,和数组c的输出类的一些操作
void main()
{
int a[50],b[50],c[100];
int i,j,k;//i表示a数组的大小 j表示b数组的大小 k用于数组的输出
printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
scanf("%d",&i);
for(k=0;k<i;k++)
scanf("%d",&a[k]);
printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
scanf("%d",&j);
for(k=0;k<j;k++)
scanf("%d",&b[k]);
void px(int*p,int n);//声明排序冒泡法
px(a,i);//调用
px(b,j);//调用
void prin(int*p,int n);//声明数组的输出函数
prin(a,i);
prin(b,j);
void hb(int*o,int*p,int*q,int m,int n);//声明两个数组的合并函数前提:这俩个数组必须是排好序的
hb(c,a,b,i,j);
prin(c,d);
}
void px(int*p,int n)//自定义函数排序冒泡法
{int i,j,t,leap;
for(i=0;i<n-1;i++)//外层循环n-1次,一次循环沉淀一个数
{
leap=0;//leap作为标记,是否两数相换
for(j=0;j<n-i-1;j++)//内循环n-i-1次
{
if(p[j]>p[j+1])//比较两个数
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;//来两个数交换
leap=1;//交换了,标记leap=1
}
}
if(leap==0) break;//经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
}
}
void prin(int*p,int n)//自定义函数数组输出函数
{
int k,sum=0;
for(k=0;k<n;k++)
{
printf("%d",p[k]);
sum++;
if(sum%10==0) printf("\n");
}
printf("\n");
}
void hb(int*o,int*p,int*q,int m,int n)//m为p指向数组的大小 n为q指向数组的大小指针o指向合并的数组
{
int i=0,j=0,k;//i为p指向数组的大小 j为q指向数组的大小
while(1)
{
if(p[i]<q[j])
{
o[d]=p[i];
i++;
d++;
}
else
{
o[d]=q[j];
j++;
d++;
}
if(i==m||j==n) break;
}
if(i==m)
{
for(k=j;k<n;k++)
{
o[d]=q[k];
d++;
}
}
if(j==n)
{
for(k=i;k<m;k++)
{
o[d]=p[k];
d++;
}
}
}
如何把2个数组合并为一个数组
把2个数组合并为一个数组有四种方法可以实现:
一、apache-commons
这是最简单的办法。在apache-commons中,有一个ArrayUtils.addAll(Object[], Object[])方法,可以一行搞定:
String[] both=(String[]) ArrayUtils.addAll(first, second);
其它的都需要自己调用jdk中提供的方法,包装一下。
为了方便,将定义一个工具方法concat,可以把两个数组合并在一起:
static String[] concat(String[] first, String[] second){}
为了通用,在可能的情况下,将使用泛型来定义,这样不仅String[]可以使用,其它类型的数组也可以使用:
static<T> T[] concat(T[] first, T[] second){}
当然如果jdk不支持泛型,或者用不上,可以手动把T换成String。
二、System.arraycopy()
[java] view plain copy
static String[] concat(String[] a, String[] b){
String[] c= new String[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
使用如下:
String[] both= concat(first, second);
三、Arrays.copyOf()
在java6中,有一个方法Arrays.copyOf(),是一个泛型函数。可以利用它,写出更通用的合并方法:
[java] view plain copy
public static<T> T[] concat(T[] first, T[] second){
T[] result= Arrays.copyOf(first, first.length+ second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
如果要合并多个,可以这样写:
[java] view plain copy
public static<T> T[] concatAll(T[] first, T[]... rest){
int totalLength= first.length;
for(T[] array: rest){
totalLength+= array.length;
}
T[] result= Arrays.copyOf(first, totalLength);
int offset= first.length;
for(T[] array: rest){
System.arraycopy(array, 0, result, offset, array.length);
offset+= array.length;
}
return result;
}
使用如下:
String[] both= concat(first, second);
String[] more= concat(first, second, third, fourth);
四、Array.newInstance
还可以使用Array.newInstance来生成数组:
[java] view plain copy
private static<T> T[] concat(T[] a, T[] b){
final int alen= a.length;
final int blen= b.length;
if(alen== 0){
return b;
}
if(blen== 0){
return a;
}
final T[] result=(T[]) java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), alen+ blen);
System.arraycopy(a, 0, result, 0, alen);
System.arraycopy(b, 0, result, alen, blen);
return result;
}
好了,关于数组合并和如何把2个数组合并为一个数组的问题到这里结束啦,希望可以解决您的问题哈!