首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言—有序序列合并

C语言—有序序列合并

作者头像
用户11369558
发布2024-11-20 14:56:26
发布2024-11-20 14:56:26
23900
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

要求:输入包含三行, 第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。 第二行包含n个整数,用空格分隔。 第三行包含m个整数,用空格分隔。

例子:

5 6 1 3 7 9 22 2 8 10 17 33 44

1 2 3 7 8 9 10 17 22 33 44

这种方法比较粗暴简单,但是花费时间代码数量也比较多

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
	int n;
	int m;
	//确定俩行的个数
	printf("请输入n和m\n");
	scanf("%d %d", &n, &m);
	int arr1[1000];
	int arr2[1000];
	int i;
	//输入数据
	printf("arr1[]=");
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("\n");
	printf("arr2[]=");
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	printf("\n");
	//一种简单粗暴,比较笨重的方法;
	// 直接将arr1和arr2合并成arr3,在进行冒泡排序
	int arr3[2000];
	int k;
	//先将arr1中的数据给arr3
	for (i = 0,k=0; i < n; i++,k++)
	{
		arr3[k] = arr1[i];
	}
	//再将arr2中的数据给arr3
	for (k = n, i = 0; k < n + m; k++, i++)
	{
		arr3[k] = arr2[i];
	}
	//冒泡排序
	for (i = 0; i < n + m - 1; i++)
	{
		int j;
		for (j = 0; j < n + m - 1 - i; j++)
		{
			if (arr3[j] > arr3[j + 1])
			{
				int tmp = arr3[j];
				arr3[j] = arr3[j + 1];
				arr3[j + 1] = tmp;
			}
		}
	}
	//最后进行打印出来
	printf("arr3[]=");
	for (i = 0; i < n + m; i++)
	{
		printf("%d ", arr3[i]);
	}
	
}

接下来的方法代码数量较少,更加简洁,但对比上面思路比较难

前面不变 

主要思路:1 3 7 9 22    i                   2 8 10 17 33 44  j   用k存入arr3数组 i,j,k初始化为0   用 arr1[i]=1和arr2[j]=2比较 1小 存入arr3[k] 并且k++,i++   随后将arr1[i]=3和arr2[j]=2比较 2小 存入arr3[k] k++,j++

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
	int n;
	int m;
	//确定俩行的个数
	printf("请输入n和m\n");
	scanf("%d %d", &n, &m);
	int arr1[1000];
	int arr2[1000];
	int i;
	//输入数据
	printf("arr1[]=");
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("\n");
	printf("arr2[]=");
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	printf("\n");
	//直接比较 将arr1中的各个元素与arr2中的对应元素比较
	//1 3 7 9 22    i
	//2 8 10 17 33 44  j
	//思路: 用k存入arr3数组 i,j,k初始化为0
	// 用 arr1[i]=1和arr2[j]=2比较 1小 存入arr3[k] 并且k++,i++
	// 随后将arr1[i]=3和arr2[j]=2比较 2小 存入arr3[k] k++,j++
	int arr3[2000];
	i = 0;
	int k = 0; int j = 0;
	while (i < n && j < m)
	{
		if (arr1[i] < arr2[j])
		{
			arr3[k] = arr1[i];
			k++; i++;
		}
		else
		{
			arr3[k] = arr2[j];
			j++; k++;
		}
	}
	//假如其中一个数组先存完,再将另外一个数组全部存入arr3;
	if (i == n)
	{
		while (j < m)
		{
			arr3[k] = arr2[j];
			k++; j++;
		}
	}
	else
	{
		while (i < n)
		{
			arr3[k] = arr1[i];
			k++; i++;
		}
	}
	//打印arr3数组
	printf("arr3[]=");
	for (k = 0; k < n + m; k++)
	{
		printf("%d ", arr3[k]);
	}
	
}

感谢观看!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档