【无标题】输入两数组,将其合并为从小到大的新数组

<之一> 先拼接再排序

#include<stdio.h>
#define N 100

void swap(int *a,int *b)		//交换两数 
{
	int t=*a;
	*a=*b;
	*b=t;
}

void s_sort(int a[],int len)	//选择排序 
{
	for(int i=0;i<len-1;i++)
		for(int j=i+1;j<len;j++)
			if(a[i]>a[j])
				swap(&a[i],&a[j]);
}

int main(){
	
	int m,n;
	scanf("%d%d",&m,&n);
	
	int a[N],b[N/2];				 
	for(int i=0;i<m;i++)
		scanf("%d",&a[i]);
	for(int i=0;i<n;i++)
		scanf("%d",&b[i]);
		
	for(int i=m,j=0;i<N;i++,j++)	//将b数组接在a数组后面 (要保证a数组足够大) 
		a[i]=b[j];
	
	s_sort(a,m+n);					//进行排序 
			
	for(int i=0;i<m+n;i++)
		printf("%d ",a[i]);
		
	return 0;
}

<之二> 当a、b数组有序时:创建一个新数组c,数组c的长度要大于等于数组a和b之和。通过比较两个有序数组中的元素,谁小就把谁放到数组c中,直到其中一个数组为空,最后把剩下的数组元素全部放到数组c里

#include<stdio.h>
#define N 100
int main()
{
 
	int m,n;
	scanf("%d%d",&m,&n); 
	
	int a[N],b[N],c[N+N];  
	for(int i=0;i<m;i++)
		scanf("%d",&a[i]);
	for(int i=0;i<n;i++)
		scanf("%d",&b[i]);
	
	s_sort(a,m);
	s_sort(b,n);
	
//******************************a、b有序时***************************************//		
	int i,j,k;
	i=j=k=0;
    while(i<m&&j<n)				//a、b都有元素时比较两数组 :小的存入c中 
        if(a[i]>=b[j]) 
			c[k++]=b[j++]; 
        else 
			c[k++]=a[i++];
    
	for(i;i<m;i++)			//若a还有元素 
        c[k++]=a[i];
 
	for(j;j<n;j++)			//若b还有元素 
        c[k++]=b[j];
//******************************************************************************//
	
	for(i=0;i<m+n;i++)
        printf ("%d ",c[i]); 
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值