# Merge two sorted arrays

Given two sorted arrays, the task is to merge them in a sorted manner.

Examples:

Input: arr1[] = { 1, 3, 4, 5}, arr2[] = {2, 4, 6, 8}
Output: arr3[] = {1, 2, 3, 4, 4, 5, 6, 8}

Input: arr1[] = { 5, 8, 9}, arr2[] = {4, 7, 8}
Output: arr3[] = {4, 5, 7, 8, 8, 9}

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Method 1 (O(n1 * n2) Time and O(1) Extra Space)

1. Create an array arr3[] of size n1 + n2.
2. Copy all n1 elements of arr1[] to arr3[]
3. Traverse arr2[] and one by one insert elements (like insertion sort) of arr3[] to arr1[]. This step take O(n1 * n2) time.

We have discussed implementation of above method in Merge two sorted arrays with O(1) extra space

Method 2 (O(n1 + n2) Time and O(n1 + n2) Extra Space)
The idea is to use Merge function of Merge sort.

1. Create an array arr3[] of size n1 + n2.
2. Simultaneously traverse arr1[] and arr2[].
• Pick smaller of current elements in arr1[] and arr2[], copy this smaller element to next position in arr3[] and move ahead in arr3[] and the array whose element is picked.
3. If there are remaining elements in arr1[] or arr2[], copy them also in arr3[].

Below image is a dry run of the above approach: Below is the implementation of the above approach:

## C++

 `// C++ program to merge two sorted arrays/ ` `#include ` `using` `namespace` `std; ` ` `  `// Merge arr1[0..n1-1] and arr2[0..n2-1] into ` `// arr3[0..n1+n2-1] ` `void` `mergeArrays(``int` `arr1[], ``int` `arr2[], ``int` `n1, ` `                             ``int` `n2, ``int` `arr3[]) ` `{ ` `    ``int` `i = 0, j = 0, k = 0; ` ` `  `    ``// Traverse both array ` `    ``while` `(i

## Java

 `// Java program to merge two sorted arrays ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `class` `MergeTwoSorted ` `{ ` `    ``// Merge arr1[0..n1-1] and arr2[0..n2-1]  ` `    ``// into arr3[0..n1+n2-1] ` `    ``public` `static` `void` `mergeArrays(``int``[] arr1, ``int``[] arr2, ``int` `n1, ` `                                ``int` `n2, ``int``[] arr3) ` `    ``{ ` `        ``int` `i = ``0``, j = ``0``, k = ``0``; ` `     `  `        ``// Traverse both array ` `        ``while` `(i

## Python 3

 `# Python program to merge ` `# two sorted arrays ` ` `  `# Merge arr1[0..n1-1] and  ` `# arr2[0..n2-1] into  ` `# arr3[0..n1+n2-1] ` `def` `mergeArrays(arr1, arr2, n1, n2): ` `    ``arr3 ``=` `[``None``] ``*` `(n1 ``+` `n2) ` `    ``i ``=` `0` `    ``j ``=` `0` `    ``k ``=` `0` ` `  `    ``# Traverse both array ` `    ``while` `i < n1 ``and` `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` `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` `     `  ` `  `    ``# Store remaining elements ` `    ``# of first array ` `    ``while` `i < n1: ` `        ``arr3[k] ``=` `arr1[i]; ` `        ``k ``=` `k ``+` `1` `        ``i ``=` `i ``+` `1` ` `  `    ``# Store remaining elements  ` `    ``# of second array ` `    ``while` `j < n2: ` `        ``arr3[k] ``=` `arr2[j]; ` `        ``k ``=` `k ``+` `1` `        ``j ``=` `j ``+` `1` `    ``print``(``"Array after merging"``) ` `    ``for` `i ``in` `range``(n1 ``+` `n2): ` `        ``print``(``str``(arr3[i]), end ``=` `" "``) ` ` `  `# Driver code ` `arr1 ``=` `[``1``, ``3``, ``5``, ``7``] ` `n1 ``=` `len``(arr1) ` ` `  `arr2 ``=` `[``2``, ``4``, ``6``, ``8``] ` `n2 ``=` `len``(arr2) ` `mergeArrays(arr1, arr2, n1, n2); ` ` `  `# This code is contributed ` `# by ChitraNayal `

## C#

 `// C# program to merge ` `// two sorted arrays ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// Merge arr1[0..n1-1] and  ` `    ``// arr2[0..n2-1] into  ` `    ``// arr3[0..n1+n2-1] ` `    ``public` `static` `void` `mergeArrays(``int``[] arr1, ``int``[] arr2,  ` `                                   ``int` `n1, ``int` `n2, ``int``[] arr3) ` `    ``{ ` `        ``int` `i = 0, j = 0, k = 0; ` `     `  `        ``// 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` `(arr1[i] < arr2[j]) ` `                ``arr3[k++] = arr1[i++]; ` `            ``else` `                ``arr3[k++] = arr2[j++]; ` `        ``} ` `     `  `        ``// Store remaining  ` `        ``// elements of first array ` `        ``while` `(i < n1) ` `            ``arr3[k++] = arr1[i++]; ` `     `  `        ``// Store remaining elements ` `        ``// of second array ` `        ``while` `(j < n2) ` `            ``arr3[k++] = arr2[j++]; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `        ``int``[] arr1 = {1, 3, 5, 7}; ` `        ``int` `n1 = arr1.Length; ` `     `  `        ``int``[] arr2 = {2, 4, 6, 8}; ` `        ``int` `n2 = arr2.Length; ` `     `  `        ``int``[] arr3 = ``new` `int``[n1+n2]; ` `     `  `        ``mergeArrays(arr1, arr2, n1, n2, arr3); ` `     `  `        ``Console.Write(``"Array after merging\n"``); ` `        ``for` `(``int` `i = 0; i < n1 + n2; i++) ` `            ``Console.Write(arr3[i] + ``" "``); ` `    ``} ` `} ` ` `  `// This code is contributed ` `// by ChitraNayal `

## PHP

 ` `

Output:

```Array after merging
1 2 3 4 5 6 7 8
```

Time Complexity : O(n1 + n2)
Auxiliary Space : O(n1 + n2)

This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.