Мне нравится это решение:
public static char[] mergeArrays(char[] a, char[] b) {
if(a.length == 0)
return b;
if(b.length == 0)
return a;
char[] newArr = new char[a.length + b.length];
if(a[0] <= b[0]) {
newArr[0] = a[0];
char[] merged = mergeArrays(Arrays.copyOfRange(a, 1, a.length), b);
System.arraycopy(merged, 0, newArr, 1, merged.length);
} else {
newArr[0] = b[0];
char[] merged = mergeArrays(a, Arrays.copyOfRange(b, 1, b.length));
System.arraycopy(merged, 0, newArr, 1, merged.length);
}
return newArr;
}
Но если вы не хотите каждый раз создавать новый массив, вы можете предпочесть сделать что-то вроде этого:
public static char[] mergeArrays( char[] A, char[] B) {
char[] sorted = new char[A.length + B.length];
mergeArraysHelper(A, B, sorted, 0);
return sorted;
}
public static void mergeArraysHelper(char[] a, char[] b, char[] sorted, int index) {
if(a.length == 0) {
System.arraycopy(b, 0, sorted, index, b.length);
return;
}
if(b.length == 0) {
System.arraycopy(a, 0, sorted, index, a.length);
return;
}
if(a[0] <= b[0]) {
sorted[index] = a[0];
mergeArraysHelper(Arrays.copyOfRange(a, 1, a.length), b, sorted, index + 1);
} else {
sorted[index] = b[0];
mergeArraysHelper(a, Arrays.copyOfRange(b, 1, b.length), sorted, index + 1);
}
}