对于此题,首先想到的是先合并,再进行排序,此方法可行,但时间复杂度依赖于排序算法,如用冒泡排序,时间复杂度为n²,如用快排,时间复杂度为nlogn。还有一种办法就先排序再合并,拿数组a中的数字依次和数组b中的数字一次作比较,大的一个放入新数组c中,索引后移一个,此方法只对数组遍历一遍,因此时间复杂度为n,此方法易出现索引越界的问题,因此需要做特殊处理,具体代码如下:
public static void shuzuMerges(int[] a, int[] b) {
int lena = a.length;
int lenb = b.length;
//定义新数组c
int[] c = new int[lena + lenb];
//定义a和b的起始索引
int indexa = 0;
int indexb = 0;
//开始往数组c中写数据
for (int i = 0; i < c.length; i++) {
//根据两数组长度决定具体方法
if (lena < lenb) {
//避免数组越界的问题
if (indexa == lena) {
c[i] = b[indexb];
indexb++;
continue;
}
if (a[indexa] >= b[indexb]) {
c[i] = a[indexa];
indexa++;
} else if (a[indexa] < b[indexb]) {
c[i] = b[indexb];
indexb++;
}
}
//长度的另一种情况
if (lena > lenb) {
if (indexb == lenb) {
c[i] = a[indexa];
indexa++;
continue;
}
if (a[indexa] >= b[indexb]) {
c[i] = a[indexa];
indexa++;
} else if (a[indexa] < b[indexb]) {
c[i] = b[indexb];
indexb++;
}
}
}
for (int num : c) {
System.out.println(num);
}
}