合并有序数组(含有变长数组)

发布时间:2024年01月03日

大家好今天的每日一题又来啦!

文章目录


题目展示

输?两个升序排列的序列,将两个序列合并为?个有序序列并输出。 输?包含三?,第??包含两个正整数n, m,?空格分隔。n表?第??第?个升序序列中数字的个 数,m表?第三?第?个升序序列中数字的个数。其中 1<=n<=30, 1<=m<=30 第??包含 n 个整数,?空格分隔。 第三?包含 m 个整数,?空格分隔。 输出为??,输出?度为n+m的升序序列,即?度为n的升序序列和?度为m的升序序列中的元素重 新进?升序序列排列合并。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目解析

定义?个?度为 n+m 的新数组 arr3 ,将两个有序数组合并到 arr3 数组中,使得 arr3 数组有 序。

1. 定义?个?度为 n+m 的新数组 arr3 ,以及两个指针 i 和 j ,分别指向 arr1 和 arr2 的开头;

2. 定义?个计数器 k ,初始化为 0;

3. ?较 arr1[i] 和 arr2[j] ,将较?的数存? arr3 中,并将对应指针向后移动?位;

4. 将计数器 k 加 1;

5. 重复步骤 3 和 4 直到某个指针越界;

6. 将另?个指针指向的数组的剩余所有元素依次存? arr3 中,存?同时将计数器 k 的值?增 1;

7. ?此, arr3 数组中的元素为 arr1 数组和 arr2 数组合并并排序后的结果,按序输出前 k 个元素即可。

二、代码及结果展示

1.代码展示

代码如下(示例):

#include <stdio.h>

int main()
{	
	int i=0;
	int n=0;
	int m=0;
	int arr1[30]={0};
	int arr2[30]={0};
	int arr3[60]={0};
	scanf("%d %d",&n,&m);
	for (i=0;i<n;i++)
	{
		scanf("%d",&arr1[i]);
	}
	for(i=0;i<m;i++)
	{
		scanf("%d",&arr2[i]);
	}
	i=0;
	int j=0;
	int k=0;
	while(i<n&&j<m)
	{
		if(arr1[i]<arr2[j])
		{
				arr3[k]=arr1[i];
				k++;
				i++;
		}
		else
		{
			arr3[k]=arr2[j];
			k++;
			j++;
		}
		if(i==n)
		{
			for(;j<m;j++)
			{
				arr3[k]=arr2[j];
				k++;
			}
			
		}
		if(j==m)
		{
			for(;i<n;i++)
			{
				arr3[k]=arr1[i];
				k++;
			}
			
		}
	}
	for(k=0;k<n+m;k++)
	{
		printf("%d",arr3[k]);
	}
	return 0;
} 

2.结果展示


总结

今天的每日一题结束啦谢谢大家O(∩_∩)O。不对的地方请在评论区留言谢谢大家的斧正

文章来源:https://blog.csdn.net/2302_80705024/article/details/135367864
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。