C语言合并两个数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言合并两个数组相关的知识,希望对你有一定的参考价值。

7、假设有三个整形数组
int a[5]=3,4,5,6,7;
int b[4]=11,22,33,44;
int c[9]=0;
编写程序将数组a,b的内容插入到数组c中;
最好就是用for语句做,我现在没学的很深,所以太高难度的看不懂,请高手帮忙,写出程序能用者,必有重谢!

sizeof语句我没有学过,能不能用别的办法呢?

不知道楼主是要普通的合并然后排序呢还是高级算法里的归并排序。后者的话建议看看百度百科http://baike.baidu.com/view/90797.htm
前者。
#include<stdio.h>
int
main()

int
a[100],b[100];
int
anum,bnum,i,j,k,temp;
printf("请输入数组a的元素个数:");
scanf("%d",&anum);
for(i=0;i<anum;i++)//数组a输入
scanf("%d",&a[i]);
printf("请输入数组b的元素个数:");
scanf("%d",&bnum);
for(i=0;i<bnum;i++)//数组b输入
scanf("%d",&b[i]);
k=anum+bnum;//计算数据总个数
for(i=0;i<bnum;i++)//b数组合入a数组
a[anum+i]=b[i];
for(i=0;i<k-1;i++)
//选择排序
for(j=i+1;j<k;j++)
if(a[i]<a[j])
temp=a[i];
a[i]=a[j];
a[j]=temp;

for(i=0;i<k;i++)//输出最终数组
printf("%8d",a[i]);
return
0;
参考技术A #include <stdio.h>

int main()

int a[5]=3,4,5,6,7;
int b[4]=11,22,33,44;
int c[9]=0;
int i=0,j;
for (;i<sizeof(a)/sizeof(int);i++)
c[i]=a[i];
j=i;
for (j=0;j<sizeof(b)/sizeof(int);j++,i++)
c[i]=b[j];

return 0;


#include <stdio.h>

int main()

int a[5]=3,4,5,6,7;
int b[4]=11,22,33,44;
int c[9]=0;
int i=0,j;
for (;i<5;i++)
c[i]=a[i];
j=i;
for (j=0;j<4;j++,i++)
c[i]=b[j];

return 0;


或者用memcpy,更简单
参考技术B #include<stdio.h>
void main()

int a[5]=3,4,5,6,7;
int b[4]=11,22,33,44;
int c[9]=0;
int i,j;
for (i=0;i<5;i++)
c[i]=a[i];
for (j=0;j<4;j++,i++)
c[i]=b[j];
for(i=0;i<9;i++)
printf("%d,",c[i]);
printf("\n");


楼上的答案中间的“j=i”是多余的。
参考技术C 合并数组的操作,具体算法依赖于合并的规则。
其通用流程如下:
1
建立一个足够容纳两个数组所有元素的目标数组。如果规则规定将一个数组合并到另一个之中,那么需要保证目标数组有可以容纳两个数组的空间,否则会出现越界。
2
遍历其中一个数组,并赋值到目标数组中。如果是一个数组合并到另一个,那么此步可以省略;
3
遍历另一个数组,按照规则插入到目标数组中。
在不同规则下,合并算法会有差异,如将长为lb的b数组附加到长为la的a数组结尾的操作,可以写作
int i;
for(i = 0; i < lb; i ++)
a[la+i]=b[i];而将长度均为l的数组a,b,交替合并到c中,可以写作
int i;
for(i = 0; i < l; i ++)

c[i*2] = a[i];
c[i*2+1] = b[i];
不管是何种方式,合并的本质就是,把a和b的每个元素,赋值到目标数组的对应位置上即可。

算法 - 合并两个有序数组成一个有序数组

最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。

题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。

有两种实现思路:

1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。

2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。

第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。

代码如下:

        public static int[] MergeList(int a[],int b[])
        {
            int result[];  
//                定义一个新数组,长度为两个数组长度之和
                result = new int[a.length+b.length];
              //i:a数组下标    j:b数组下标  k:新数组下标
                int i=0,j=0,k=0;
//                按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
                while(i<a.length && j<b.length)
                    if(a[i] <= b[j]) {
                        result[k++] = a[i++];
                        print(result);
                        System.out.println();
                    }else{
                        result[k++] = b[j++];
                    }
                /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 *
                 * 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/
                while(i < a.length) 
                    result[k++] = a[i++];
                while(j < b.length)
                    result[k++] = b[j++];
                return result;
           }

 

以上是关于C语言合并两个数组的主要内容,如果未能解决你的问题,请参考以下文章

求指教,以下皆用数组在c语言里编写程序

用C语言怎么把文件中的两行合并成一行

怎么用c语言将两个数组并起来?

⭐算法入门⭐《简单排序》简单02 —— LeetCode 88. 合并两个有序数组

c语言的问题!!急!!

c语言有序链表合并,我找不到问题所在,求纠错!!