剑指offer-5-替换空格.2课后题.合并两个有序数组(C++实现)

题目

有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入A1中,并且所有的数字是排序的。

思路

从尾到头比较A1和A2中的数字。并把较大的数字复制到A1中的合适位置

C++实现

//剑指offer.面试题5.替换空格.课后相关题目-合并两个有序数组
//题目:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。
//请实现一个函数,把A2中的所有数字插入A1中,并且所有的数字是排序的。

//思想:从尾到头比较A1和A2中的数字。并把较大的数字复制到A1中的合适位置

#include<iostream>

class Solution
{
public:
	void merge_twoarray(int arrayA1[], int arrayA2[], int lengthA1, int lengthA2)
	{
		int totallength = lengthA1 + lengthA2 - 1;//先算出两数组合并后长度
		lengthA1--;
		lengthA2--;

		while (lengthA1 >= 0 && lengthA2 >= 0)//先保证合并完一个数组
		{
			if (arrayA1[lengthA1] >= arrayA2[lengthA2])
			{
				arrayA1[totallength] = arrayA1[lengthA1];
				lengthA1--;
			}
			else
			{
				arrayA1[totallength] = arrayA2[lengthA2];
				lengthA2--;
			}
			totallength--;
		}
		//再合并余下的
		while (lengthA1 >= 0)
		{
			arrayA1[totallength] = arrayA1[lengthA1];
			lengthA1--;
			totallength--;
		}

		while (lengthA2 >= 0)
		{
			arrayA1[totallength] = arrayA2[lengthA2];
			lengthA2--;
			totallength--;
		}
	}
};

int main()
{
	int A1[20] = { 1,3,5,7,9 };
	int A2[] = { 1,2,6,8,10,13,15 };

	int lengthA1 = 5;// sizeof(A1) / sizeof(int);
	int lengthA2 = sizeof(A2) / sizeof(int);

	Solution solution; //实例化类
	solution.merge_twoarray(A1, A2, lengthA1, lengthA2);

	for (int i = 0; i < (lengthA1 + lengthA2); i++)
	{
		std::cout << A1[i] << " ";
	}
	std::cout << std::endl;
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值