import java.util.Arrays;
public class Main {
// Give two sorted arrays of the integers, write a function to merge these two arrays.
// Both arrays can have duplicate elements.
// EXPECTED OUTPUT: { -12, -6, 5, 11, 12, 17, 21, 25, 33, 39, 41, 41, 44, 49, 50, 50 }
public static void main(String[] args) {
int[] a = { 12, 25, 33, 41, 50 };
int[] b = { -12, -6, 5, 11, 17, 21, 39, 41, 44, 49, 50 };
// STEP 1: Create an array c[] of size a + b.
int[] c = new int[a.length + b.length];
mergeArrays(a, b, a.length, b.length, c);
System.out.println("EXPECTED OUTPUT: [-12, -6, 5, 11, 12, 17, 21, 25, 33, 39, 41, 41, 44, 49, 50, 50]");
System.out.println("ACTUAL OUTPUT: " + Arrays.toString(c));
}
// Merge a[0..n1-1] and b[0..n2-1]
// into c[0..n1+n2-1].
private static void mergeArrays(int[] a, int[] b, int n1, int n2, int[] c) {
int i = 0, j = 0, k = 0;
// STEP 2: Copy all n1 elements of a[] to c[].
// - Pick smaller of current elements in a[] and b[],
// copy this smaller element to next position in c[]
// and move ahead in c[] and the array whose element is picked.
// Traverse both array
while (i < n1 && j < n2) {
// Check if current element of first
// array is smaller than current element
// of second array. If yes, store first
// array element and increment first array
// index. Otherwise do same with second array.
if (a[i] < b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
// STEP 3: Traverse b[] and one by one insert elements (like insertion sort) of c[] to a[].
// Store remaining elements of first array
while (i < n1) {
c[k++] = a[i++];
}
// Store remaining elements of second array
while (j < n2) {
c[k++] = b[j++];
}
}
}
Comments