码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-12-12 16:37:00      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:数组   合并   从后往前   遍历   阿里   

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

    

1. 题目描述    


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


2. 从后往前合并


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


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

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

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


    程序如下:


#include<iostream>
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<len1+len2-1; i++)
		cout<<a[i]<<' '; 
	cout<<endl;
	
	return 0; 
}


结果:


bubuko.com,布布扣












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

标签:数组   合并   从后往前   遍历   阿里   

原文地址:http://blog.csdn.net/puqutogether/article/details/41895359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!