合并两个有序数组C++

合并两个有序数组

题目描述:

有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中,并且所有的数字是排序的。
思路分析:从尾到头边比较,边移入正确的位置,时间复杂度为O(n)

#include <iostream>
using namespace std;

void Combin2Array(int str1[], int length1, int str2[], int length2)
{
	if (str1 == nullptr|| length1 <= 0 || str2 == nullptr || length2 <= 0)
		return;
	int len1 = 0;
	for (int i = 0; i < length1; ++i) //使用for循环计算数组中实际的元素数目
	{
		if (str1[i])
			len1++;
	}
	int newLength = len1+length2 - 1;//这是最新修改的地方!!!新数组的长度是两个数组非零元素数量之和
	int len2 = length2 - 1;
    len1--; //数组最后一个数字的序号为长度减一
	while (len1 >= 0 && len2 >= 0)
	{
		if (str1[len1] < str2[len2])
		{
			str1[newLength--] = str2[len2--];
		}
		else
		{
			str1[newLength--] = str1[len1--];
		}
	}
	//下面这部分是新增的,不可缺少,处理一个数组中的元素已经完全加入到新数组,另一个还没完的情况
	while (len1 < 0 && len2 >= 0)
	{
		str1[newLength--] = str2[len2--];
	}
	while (len2 < 0 && len1 >= 0)
	{
		str1[newLength--] = str1[len1--];
	}
}
int main()
{
	int array1[100] = { 1, 3, 5, 7, 9 };
	int array2[] = { 2, 4, 6, 8, 10 , 11, 12, 13, 14, 15};
	//int array1[100] = {13, 15, 16, 17, 19 };
	//int array2[] = { 2, 4, 6, 8, 10 , 11, 12, 13, 14, 15};
	Combin2Array(array1, sizeof(array1) / sizeof(int), array2, sizeof(array2) / sizeof(int));

	for (int i = 0; i < sizeof(array1) / sizeof(int); ++i)
	{
		if (array1[i])//增加判断条件,只输出非零元素!!!
        {
            cout << array1[i] << '\t';
        }
	}
	/*基于范围的for循环
	for (auto x :array1)
	{
		cout << x << '\t';
	}
	*/
	return 0;
}


运行结果如下:

在这里插入图片描述在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑着的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值