这里分享一个最近看到的一个比较好用的代码,当用到两个数组相加并需要排序的时候可以作为一个工具类来使用。对两个数组a[]和b[]进行合并而且同时进行排序,返回一个有序的c[],并且c.length = a.length + b.length
import java.util.Arrays;
public class Array_Add_Sort {
public static void main(String[] args) {
//将两个int类型的一维数按从小到大的顺序组合并
int[] oneArr = { 2, 11, 26, 27, 37, 44, 48, 60 };
int[] twoArr = { 19, 35, 49, 55, 58, 75, 83, 84, 91, 93 };
int[] threeArr = new int[oneArr.length + twoArr.length];
int p = 0, q = 0;
while (p < oneArr.length && q < twoArr.length) {
threeArr[p + q] = oneArr[p] < twoArr[q] ? oneArr[p++] : twoArr[q++];
}
if (p < oneArr.length) {
System.arraycopy(oneArr, p, threeArr, p + q, oneArr.length - p);
} else if (q < twoArr.length) {
System.arraycopy(twoArr, q, threeArr, p + q, twoArr.length - q);
}
System.out.println(Arrays.toString(threeArr));
}
}
这里首先来声明一下数组1和数组2,也可以用方法的形参来传入,这里就先默认创建两个数组了。 再声明一个空的数组3,数组3的长度等于数组1和数组2的长度的和。
// 先声明3个数组
int[] oneArr = { 2, 11, 26, 27, 37, 44, 48, 60 };
int[] twoArr = { 19, 35, 49, 55, 58, 75, 83, 84, 91, 93 };
int[] threeArr = new int[oneArr.length + twoArr.length];
这里声明两个下标计数器,用于稍后追踪数组1和数组2的下标。
int p = 0, q = 0;
用一个while循环来对将数组1和数组2里的值添加到数组3当中,并且可以看到,在方法体中是用三目运算来判断,将较大的值放到当前数组3的位置中。比较的同时用p++或q++来让下标递增1。
while (p < oneArr.length && q < twoArr.length) {
threeArr[p + q] = oneArr[p] < twoArr[q] ? oneArr[p++] : twoArr[q++];
}
这里有一种情况,当数组1或者数组2已经全部添加到数组3当中后,前面while中的判定就无法满足了。所以这里的作用就是将剩下数组中的部份再添加到数组3当中。这里如果把这段if去掉,则数组3的输出结果为:[2, 11, 19, 26, 27, 35, 37, 44, 48, 49, 55, 58, 60, 0, 0, 0, 0, 0]
if (p < oneArr.length) {
System.arraycopy(oneArr, p, threeArr, p + q, oneArr.length - p);
} else if (q < twoArr.length) {
System.arraycopy(twoArr, q, threeArr, p + q, twoArr.length - q);
}
然后对结果进行输出,数组3也可以作为方法的return
System.out.println(Arrays.toString(threeArr));
最后执行完整代码,返回结果为:[2, 11, 19, 26, 27, 35, 37, 44, 48, 49, 55, 58, 60, 75, 83, 84, 91, 93]