问题:
给定两个排序的数组,制作第三个排序的数组,其中包含两个原始数组所有元素的副本。
思路:
从最左边比较两个数组的元素,将两个数组中较小值复制到第三个数组中,然后向右遍历。
基本代码实现:
public class Merge {
public static void sort(Comparable[] a, Comparable[] b, Comparable[] c) {
int m = 0;
int n = 0;
int i = 0;
while (m < a.length && n < b.length) {
if (a[m].compareTo(b[n]) <= 0) {
c[i++] = a[m++];
} else if (a[m].compareTo(b[n]) > 0) {
c[i++] = b[n++];
}
}
while (m < a.length) c[i++] = a[m++];
while (n < b.length) c[i++] = b[n++];
}
public static void main(String[] args) {
Integer[] a = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
Integer[] b = new Integer[]{3, 4, 5};
Integer[] c = new Integer[12];
sort(a, b, c);
for (Comparable i : c) {
System.out.print(i);
}
}
}
运用泛型后代码如下:
public class Merge {
public static <E extends Comparable<E>> void sort(E[] a, E[] b, E[] c) {
int m = 0;
int n = 0;
int i = 0;
while (m < a.length && n < b.length) {
if (a[m].compareTo(b[n]) <= 0) {
c[i++] = a[m++];
} else if (a[m].compareTo(b[n]) > 0) {
c[i++] = b[n++];
}
}
while (m < a.length) c[i++] = a[m++];
while (n < b.length) c[i++] = b[n++];
}
public static void main(String[] args) {
Integer[] a = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
Integer[] b = new Integer[]{3, 4, 5};
Integer[] c = new Integer[12];
sort(a, b, c);
for (Integer i : c) {
System.out.print(i);
}
}
}