两个有序数组合并
引言
将两个已经排好序的数组进行合并,使得合并后的数组也是有序
示例:
int a[] = {1, 3, 5, 11, 20};
int b[] = {1, 2, 3, 4, 7, 8, 11, 25, 30};
排好序的结果
1 1 2 3 3 4 5 7 8 11 11 20 25 30
代码
public class MergeArray {
public static int[] mergeSortedArrays(int a[], int b[]) {
//如果其中一个长度为0,直接返回另外一个数组
if (a.length == 0) {
return Arrays.copyOf(b, b.length);
}
if (b.length == 0) {
return Arrays.copyOf(a, a.length);
}
//合并后的结果
int[] c = new int[a.length + b.length];
//i:a[]的索引位置
//j:b[]的索引位置
//k:c[]的索引位置
int i = 0, j = 0, k = 0;
while (true) {
//如果c已经被填充满了,则已经排好充了,直接退出循环返回即可
if (k == c.length) {
break;
}
//当其中一个数组已经被扫描完了,直接将另外一个数组当前位置上的数据拷贝到c上
if (i == a.length) {
c[k++] = b[j++];
continue;
}
//当其中一个数组已经被扫描完了,直接将另外一个数组当前位置上的数据拷贝到c上
if (j == b.length) {
c[k++] = a[i++];
continue;
}
//将小的那一个拷贝到c当前位置上
if (a[i] < b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
return c;
}
public static void printArray(int[] array) {
if (array == null) {
return;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
//将两个已排序的数组进行合并,合并后的数组也是有序的
int a[] = {1, 3, 5, 11, 20};
int b[] = {1, 2, 3, 4, 7, 8, 11, 25, 30};
System.out.println("a: ");
printArray(a);
System.out.println("b: ");
printArray(b);
System.out.println("merge: ");
printArray(mergeSortedArrays(a, b));
}
}