13 有序数组合并练习题

0

有两个从小到大排序以后的数组A和B,

其中A的末端有足够的缓冲空容纳B。

请编写一个方法,将B合并入A并排序。

给定两个有序int数组AB,A中的缓冲空用0填充

同时给定A和B的真实大小int n和int m,请返回合并后的数组。

思路:定义三个指针,不断地把两个数组中较大的放到后面

import java.util.*;

public class Merge {
    public int[] mergeAB(int[] A, int[] B, int n, int m) {
         int indexA=n-1;
        int indexB=m-1;
        int indexC=A.length-1;
        while(indexA>=0&indexB>=0){
          if(A[indexA]>B[indexB]){
            A[indexC]=A[indexA];
            indexA--;
          }else{
            A[indexC]=B[indexB];
            indexB--;
          }
          indexC--;
        }
        while(indexA>=0){
          for(;indexA>=0;indexA--){
            A[indexC]=A[indexA];
            indexC--;
          }
        }
        while(indexB>=0){
          for(;indexB>=0;indexB--){
            A[indexC]=B[indexB];
                indexC--;
          }
        }

        return A;  
    }
}