两个有序数组合并成一个有序数组

两个有序数组合并成一个有序数组

    

1. 题目描述    


    数组a是有序的,数组b也是有序的,如何高效地合并它们成一个数组,并且新数组也是有序的?


2. 从后往前合并


    这道题目是师兄电面阿里的时候,问到的一道题目。现在我们来说一下解法~


    假设数组a足够长,可以在数组a上合并二者。我们的解法基本思想就是从后往前合并数组。

    每次合并的时候,都要比较a和b当前数组的大小,取较大的值后移,注意一定要是后移!

    为什么从后往前呢?其实就是为了方便后移,因为较大的一定是在后面的。


    程序如下:


#include
using namespace std; 
#define MAX 100
int main()
{
	int a[MAX]={1,3,5,7,9}; 
	int b[MAX]={2,4,6,8}; 
	int len1=5, len2=4; 

	int p1=len1-1, p2=len2-1;  //从后往前遍历
	int q=len1+len2-1; 

	while(p1>=0 && p2>=0)  //二者长度相等部分
	{
		if(a[p1]>=b[p2])
		{
			a[q]=a[p1]; 
			p1--; 
			q--; 
		}
		else
		{
			a[q]=b[p2]; 
			q--; 
			p2--; 
		}
	}

	while(p1>=0)  //假如a数组多出来
	{
		a[q]=a[p1]; 
		q--; 
		p1--; 
	}

	while(p2>=0)  //假如b数组多出来
	{
		a[q]=b[p2]; 
		q--; 
		p2--; 
	}

	for(int i=0; i


结果:














你可能感兴趣的:(Algorithm,Probelm,数组,合并,从后往前,遍历,阿里)