(OJ)MergeSorted

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 (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are m andn respectively.

方法一(定义一个中间数组temp):
public class MergeSortedArray {
	public void merge(int A[],int m,int B[],int n){
		int[] temp=new int[m+n];
		int i=0,j=0,k=0;
		while(i<m&&j<n){
			if(A[i]<=B[j]){
				temp[k++]=A[i];
				i++;
			}else{
				temp[k++]=B[j];
				j++;
			}
		}
		while(i<m){
			temp[k++]=A[i++];
		}
		while(j<n){
			temp[k++]=B[j++];
		}
		for(i=0;i<m+n;i++){
			A[i]=temp[i];
		}
	}
}
方法二:

初始化两个int 作为指示器,分别指向a数组的最后一个元素和b数组的最后一个元素。

然后比较大小,较大的放入a数组的末端。这样不断往前走。直到a数组用完或者b数组用完。

如果a数组先用完,那么就把b数组剩下的所有元素复制到a的前半部分,如果b数组先用完,那么a数组已经是一个有序的数组。

初始化两个int 作为指示器,分别指向a数组的最后一个元素和b数组的最后一个元素。

然后比较大小,较大的放入a数组的末端。这样不断往前走。直到a数组用完或者b数组用完。

如果a数组先用完,那么就把b数组剩下的所有元素复制到a的前半部分,如果b数组先用完,那么a数组已经是一个有序的数组。

public class MergeSortedArray {
	public void merge(int A[],int m,int B[],int n){
		int A_tail=m-1;
		int B_tail=n-1;
		int pointer=m+n-1;
		while(A_tail>=0&&B_tail>=0){
			if(A[A_tail]>=B[B_tail]){
				A[pointer--]=A[A_tail--];
			}else{
				A[pointer--]=B[B_tail--];
			}
			
		}
		while(B_tail>=0){
			A[pointer--]=B[B_tail--];
			
		}
	}
		
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值