C将两个有序的数组合并成一个有序数组

编写程序,分别输入两个按从小到大排序的数组 a 和 b,将这两个有序数组合并,使合并后的数组仍是从小到大有序的。

合并两个有序数组的方法:

  1. 有两个有序数组ab,其中数组a的末尾有足够的空间容纳数组b,将数组b容纳到数组a中。

  2. 创建一个新数组c,数组c的长度要大于等于数组ab之和。通过比较两个有序数组中的元素,谁小就把谁放到数组c中,直到其中一个数组为空,最后把剩下的数组元素全部放到数组c里。

测试输入:

10

10 15 42 52 59 64 67 73 82 88

3

24 32 57

输入说明: 第一行为n,表示输入数组an个整数。 第二行为从小到大的n个整数。 第三行为m,表示输入数组bm个整数。 第四行为从小到大的m个整数。

预期输出: 10 15 24 32 42 52 57 59 64 67 73 82 88

用第二种方法做:

#include<stdio.h>
#define N 20
int main()
{

	int a[N]={ 0 }, b[N]={ 0 };
	int i,j,k,anum,bnum,c[N+N];
	scanf("%d",&anum);   //输入数组a元素个数
	for(i=0;i<anum;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&bnum);   //输入数组b元素个数
	for(i=0;i<bnum;i++)
	{
		scanf("%d",&b[i]);
	}
	/***** 在数组a和b都有数据时比较两个数组 *****/
	/********** Begin *********/
	i=0,j=0,k=0;
    while(i<anum&&j<bnum)
    {
        if(a[i]>=b[j])
        {
            c[k]=b[j];k++;j++;
        }
        else
        {
            c[k]=a[i];k++;i++;
        }
    }
	/********** End **********/
	/***** 如果数组a还有数据 *****/
	/********** Begin *********/
	for(i;i<anum;i++)
    {
        c[k]=a[i];k++;
    }
	/********** End **********/

	/***** 如果数组b还有数据 *****/
	/********** Begin *********/
	for(j;j<bnum;j++)
    {
        c[k++]=b[j];
    }
	/********** End **********/
	/***** 输出数组c *****/
	/********** Begin *********/
	for(i=0;i<anum+bnum;i++)
    {
        printf ("%d ",c[i]); 
    }
	/********** End **********/	
	return 0;
}

运行结果:

  • 38
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值