日月的弯刀  
Where Amazing Happens!

 


两个有序数组合并

关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉
 

第15节 有序数组合并练习题

 

有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。

给定两个有序int数组AB,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。

 
 
1
import java.util.*;
2

3
public class Merge {
4
     public int[] mergeAB(int[] A, int[] B, int n, int m) {
5
        //标记A数组和B数组遍历位置的下标
6
        int indexA = n - 1;
7
        int indexB = m - 1;
8

9
        //遍历时标记元素放的位置
10
        int index = n - 1 + m;
11
        /**
12
         * 每一轮遍历,比较的是此时数组A和数组B对应索引所指的元素,挑出最大的放到A数组最后index的位置
13
         */
14
        while(indexA >= 0 && indexB >= 0){
15
            if(A[indexA] > B[indexB]){
16
                A[index] = A[indexA];
17
                indexA--;
18
            }
19
            else{
20
                A[index] = B[indexB];
21
                indexB--;
22
            }
23
            index--;
24
        }
25
        /**
26
         * 查看B数组中的元素是否遍历完成,没有遍历完成此时遍历剩余的元素到A中
27
         * 
28
         * A:                       4   5   7   10
29
         * B:1   2
30
         */
31
        while(indexB>=0){
32
            A[indexB] = B[indexB];
33
            indexB--;
34
        }
35
        return A;
36
    }
37
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
posted on 2017-03-11 22:00  日月的弯刀  阅读(882)  评论(0编辑  收藏  举报