题目
原文:
You are given two sorted arrays, A and B, and A has a large enough buffer at the end to hold B. Write a method to merge B into A in sorted order.
译文:
给两个已经排好的数组A、B,并且A有足够大的缓冲容纳B,写一个方法将B合并进入A并保持有序。
解答
因为A的长度足够容纳A+B所有元素,则可以通过找出合并后A的长度n+m(n,m分别为A,B原来元素的长度),然后从A,B的尾部元素开始比较,存入合并后A的尾部,并对下标值递减,这就避免了元素的覆盖和冲突。代码如下:
class Q9_1{
public static void merge(int[] a,int[] b,int n,int m){
int k=m+n-1;
int i=n-1;
int j=m-1;
while(i>=0&&j>=0){
if(a[i]>b[j]){
a[k--]=a[i--];
}else{
a[k--]=b[j--];
}
}
while(j>=0){
a[k--]=b[j--];
}
}
public static void main(String[] args){
int[] a =new int[10];
a[0]=1;
a[1]=3;
a[2]=5;
int[] b = new int[5];
b[0]=2;
b[1]=4;
b[2]=6;
b[3]=7;
b[4]=8;
System.out.println(a.length+" "+b.length);
//int[] c=mergeSortedArray(a,b,3,5);
merge(a,b,3,5);
for(int i=0;i<8;i++){
System.out.print(a[i]+" ");
}
}
}
---EOF---