您的位置:首页 > 其它

算法--两个有序数组合并

2017-03-11 22:00 316 查看

两个有序数组合并



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

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

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

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

Java (javac 1.7)
代码自动补全

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

}


您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

运行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: