C++算法之 合并两个数组

1:合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;

 

因为题目当中已经有一个数组可以容的下两个数组的元素,所有不需要请求新的数组,但是要把比较后的数组从后面往前面放;

比如有数组A实际5个元素,数组B实际5个元素,那么我们  让a[4]与b[4]比较,把大的那一个放到a[9];比如a[4]>b[4];那么把a[4]放到

a[9];再让a[3]与b[4]比较,此时如果b[4]大,那么把b[4]放到a[8];再用b[3]与a[3]比较;依次类推,当A数组已经都遍历完,但是B数组

还没有遍历完,说明剩余的B数组比A数组最小的还小,把剩余的B数组按序放到A数组即可:

 

 

下面附上代码:

// MergeArray.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void MergeArray(int a[], int aCount, int b[], int blen)//aCount为a数组实际(狭义)长度,blen为b数组实际长度
{
	int len = aCount + blen - 1;//合并数组的长度也就是a数组的广义长度
	aCount--;
	blen--;
	while (aCount>=0 && blen>=0)
	{
		if (a[aCount] >= b[blen])
		{
			a[len--] = a[aCount--];
		}
		else
		{
			a[len--] = b[blen--];
		}
	}
	while(blen >= 0)
	{
		a[len--] = b[blen--];
	}

}

int _tmain(int argc, _TCHAR* argv[])
{
	int a[] = {2,4,6,8,10,0,0,0,0,0};
	int b[] = {1,3,5,7,9};

	MergeArray(a,5,b,5);
	for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
	{
		cout<<a[i]<<" ";
	}
	getchar();
	return 0;
}


 

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值