码迷,mamicode.com
首页 > 其他好文 > 详细

merge sorted array

时间:2015-04-22 18:20:28      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

题目:

    Given two sorted integer arrays A and B, merge B into A as one sorted array.

    Note:

    You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.

    题意要把两个有序的数组合并到他们中的一个数组中。

题目分析:数组合并不像链表合并,如果从头往后合并,要么移动数据,要么重新开辟一段内存(重新定义一个m+n大小的数组),A数组后面n个元素本身就是空的,我们可以从后往前合并,不用移位。

方法一:

从后往前合并。代码如下:

void merge_back(int A[], int m, int B[], int n) {
	int i=m-1;
	int j=n-1;
	int t=m+n-1;
	while (i>=0&&j>=0)
	{
		if (A[i]>=B[j])
		{
			A[t]=A[i];
			i--;
		}
		else
		{
			A[t]=B[j];
			j--;
		}
		t--;
	}
	while(j>=0)
	{
		A[t]=B[j];
		j--;
		t--;
	}
}
方法二

利用插入排序算法,即假设对比的数据是A的最后一个数据和B的第一个数据。如果A的最后一个数据比B的第一个数据小,直接插,如果A的最后一个数据比B的第一个数据大,利用插入排序算法,找A数组中合适B的第一个元素的位置。

代码如下:

void insert_merge(int A[], int m, int B[], int n) 
{
	int i=m-1;
	int j=0;
	int t=m;
	for (t=m;t<m+n;t++)
	{
		if (A[i]<=B[j])
		{
			A[t]=B[j];
			j++;
			i++;
		}
		else
		{
			int k=i;
			int x=B[j];
			A[t]=A[i];
			while(x<A[k])
			{
				A[k+1]=A[k];
				k--;
			}
			A[k+1]=x;
			i++;
			j++;
		}
	}
}

完整代码如下:

<pre name="code" class="cpp">#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
void merge_back(int A[], int m, int B[], int n) ;
void insert_merge(int A[], int m, int B[], int n) ;

void main()
{
	int A[5+6]={1,4,8,9,10};
	int B[6]={2,5,6,9,10,11};
	insert_merge(A, 5,  B, 6);
	//merge_back(A, 5,  B, 6);
	for (int i=0;i<11;i++)
	{
		cout<<A[i]<<" ";
	}
}
void merge_back(int A[], int m, int B[], int n) {
	int i=m-1;
	int j=n-1;
	int t=m+n-1;
	while (i>=0&&j>=0)
	{
		if (A[i]>=B[j])
		{
			A[t]=A[i];
			i--;
		}
		else
		{
			A[t]=B[j];
			j--;
		}
		t--;
	}
	while(j>=0)
	{
		A[t]=B[j];
		j--;
		t--;
	}
}
void insert_merge(int A[], int m, int B[], int n) 
{
	int i=m-1;
	int j=0;
	int t=m;
	for (t=m;t<m+n;t++)
	{
		if (A[i]<=B[j])
		{
			A[t]=B[j];
			j++;
			i++;
		}
		else
		{
			int k=i;
			int x=B[j];
			A[t]=A[i];
			while(x<A[k])
			{
				A[k+1]=A[k];
				k--;
			}
			A[k+1]=x;
			i++;
			j++;
		}
	}
}



运行结果为:1 2 4 5 6 8 9 9 10 10 11

merge sorted array

标签:

原文地址:http://blog.csdn.net/sinat_24520925/article/details/45196925

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