import java.util.Arrays;
public class MergingTwoArrays {
/*
* This code merges two arrays, sorted in ascending
* order, into a single aggregate array sorted in
* ascending order.
*
* Let n be size of first array and
* m the size of the second array.
*
* Time complexity: O(n+m)
* Space complexity: O(n+m)
*/
public static void main(String[] args) {
int[] nums1 = { 1, 5, 7 };
int[] nums2 = { 3, 6 };
// Below prints: [1, 3, 5, 6, 7]
System.out.println(Arrays.toString(merge(nums1, nums2)));
}
// Method merging the two sorted arrays
private static int[] merge(int[] nums1, int[] nums2) {
int n = nums1.length, m = nums2.length;
int[] sortedArray = new int[n + m];
// Indexes into nums1, nums2, and sortedArray
int nums1Ptr = 0, nums2Ptr = 0, sortedArrayIdx = 0;
// Collect the elements of nums1 and nums2 in order
while (nums1Ptr < n && nums2Ptr < m) {
// Transfer smaller element to sortedArray
if (nums1[nums1Ptr] < nums2[nums2Ptr]) {
sortedArray[sortedArrayIdx++] = nums1[nums1Ptr++];
} else {
sortedArray[sortedArrayIdx++] = nums2[nums2Ptr++];
}
}
// Transfer elements remaining in either nums1 or nums2
// to the resulting sortedArray
while (nums1Ptr < n) {
sortedArray[sortedArrayIdx++] = nums1[nums1Ptr++];
}
while (nums2Ptr < m) {
sortedArray[sortedArrayIdx++] = nums2[nums2Ptr++];
}
return sortedArray;
}
}
def merge(X, Y):
m = len(X)
n = len(Y)
# Consider each element `X[i]` of list `X[]` and ignore the element if it is
# already in the correct order; otherwise, swap it with the next smaller
# element, which happens to be the first element of `Y[]`.
for i in range(m):
# compare the current element of `X[]` with the first element of `Y[]`
if X[i] > Y[0]:
# swap `X[i] with `Y[0]`
temp = X[i]
X[i] = Y[0]
Y[0] = temp
first = Y[0]
# move `Y[0]` to its correct position to maintain the sorted
# order of `Y[]`. Note: `Y[1…n-1]` is already sorted
k = 1
while k < n and Y[k] < first:
Y[k - 1] = Y[k]
k = k + 1
Y[k - 1] = first
def mergeArrays(arr1, arr2, n1, n2):
arr3 = [None] * (n1 + n2)
i = 0
j = 0
k = 0
while i < n1 and j < n2:
if arr1[i] < arr2[j]:
arr3[k] = arr1[i]
k = k + 1
i = i + 1
else:
arr3[k] = arr2[j]
k = k + 1
j = j + 1
while i < n1:
arr3[k] = arr1[i]
k = k + 1
i = i + 1
while j < n2:
arr3[k] = arr2[j]
k = k + 1
j = j + 1