全网最易懂的解题——C语言“有序序列合并”

现在我们需要将以下两组数列合并

数组arr1:1,3,7,9,22

数组arr2:2,8,10,17,33,44

然后以这样的顺序输出:1,2,3,7,8,9,10,17,22,33,44

那我们先要建立arr1和arr2,为了让这两个数组在未来使用的更方便能同时排序更多的数字,我们将其内存设置为1000,这样这个数组就能存放1000个数字了

int arr1[1000] = {0};
int arr2[1000] = {0};

然后我们得到arr1和arr2的数字,我们需要建立两个变量来存放数组中数字的个数,然后再将得到的数字输入进去

	int arr1[1000] = { 0 };
	int arr2[1000] = { 0 };

	int n, m;
	scanf("%d %d", &n, &m);

	int i = 0;
	//为arr1存放数字
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	//为arr2存放数字
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}

接下里就是合并这两个数组了,其实就是让arr1[0]和arr2[0]相互比较,将较小的那个数打印出来,假设arr1[0]比较小那么打印arr1[0],然后让arr1的下标加一,继续让arr1[1]和arr2[0]比较,以此类推。

//合并
int i = 0;//arr1的下标
int j = 0;//arr2的下标

while()
{
	if (arr1[i] < arr2[j])
	{
		printf("%d", arr1[i]);//打印较小的
		i++;//下标加一
	}
	else
	{
		printf("%d", arr2[j]);//打印较小的
		j++;//下标加一
	}
}

代码写到这,现在这道题最大的问题来了,那arr1和arr2中存放的数字个数是不一样的,那最后多余的数字没法进行比较那怎么办呢?

顺带一提,那么在合法范围内的比较条件是不是也有了 i < n && j < m

	//合法范围外直接打印剩余数
	while (i < n)//如果走进这个循环说明arr2已经提前走完
	{
		printf("%d", arr1[i]);
		i++;
	}
	while (j < m)//如果走进这个循环说明arr1已经提前走完
	{
		printf("%d", arr2[j]);
		j++;
	}

这样我们就完成了我们的代码,稍微加点提示语句让自己使用的更赏心悦目方便理解,大家可以试着调试一下试试看,说不定感触会更深刻

//有序数列合并
int main()
{
	int arr1[1000] = { 0 };
	int arr2[1000] = { 0 };

	int n, m;
	printf("请输入您想在arr1和arr2中存放几个数字:");
	scanf("%d %d", &n, &m);

	int i = 0;
	printf("arr1请输入:");
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("arr2请输入:");
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	

	i = 0;//不能多次初始化
	int j = 0;

	while(i < n && j < m)//合法比较的条件
	{
		if (arr1[i] < arr2[j])
		{
			printf("%d ", arr1[i]);
			i++;
		}
		else
		{
			printf("%d ", arr2[j]);
			j++;
		}
	}

	while (i < n)
	{
		printf("%d ", arr1[i]);
		i++;
	}
	while (j < m)
	{
		printf("%d ", arr2[j]);
		j++;
	}

	return 0;
}

累了饿了喝口茶,换个坐姿,点个赞~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值