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--];
}
}
}