首页编程数组合并,如何把2个数组合并为一个数组

数组合并,如何把2个数组合并为一个数组

编程之家2023-11-06249次浏览

大家好,今天我将为大家揭秘数组合并和如何把2个数组合并为一个数组的奥秘,希望我的分享能给你带来新的启发和知识。

数组合并,如何把2个数组合并为一个数组

c语言,怎样合并数组

//两个数组合并,参考代码:

#include"stdio.h"

intd=0;//用于记录数组c的大小,和数组c的输出类的一些操作

voidmain()

{

inta[50],b[50],c[100];

数组合并,如何把2个数组合并为一个数组

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");

数组合并,如何把2个数组合并为一个数组

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个数组合并为一个数组的问题到这里结束啦,希望可以解决您的问题哈!

常州网站推广?常州网络推广怎么收费常州网络推广营销公司css模板 什么是CSS模板