> For the complete documentation index, see [llms.txt](https://ke-ren.gitbook.io/leetcode-practice/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ke-ren.gitbook.io/leetcode-practice/array/005-merge-sorted-array.md).

# 005 Merge Sorted Array

## Given two sorted integer arrays `nums1` and `nums2`, merge `nums2` into `nums1` as one sorted array.

The number of elements initialized in `nums1` and `nums2` are `m` and `n` respectively. You may assume that `nums1` has enough space (size that is equal to `m + n`) to hold additional elements from `nums2`.

**Example 1:**

```
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
```

**Example 2:**

```
Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
```

**Constraints:**

* `0 <= n, m <= 200`
* `1 <= n + m <= 200`
* `nums1.length == m + n`
* `nums2.length == n`
* `-109 <= nums1[i], nums2[i] <= 109`

## Solution

### Method 1

#### Code

{% tabs %}
{% tab title="C#" %}

```csharp
public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n) {
        //put nums2 back nums1
        for(int index = 0; index < n; index++){
            nums1[m+index] = nums2[index];
        }
        
        foreach(int value in nums1){
            Console.WriteLine(value);
        }
        
        // bubble sort
        for(int i = 0; i < nums1.Length - 1 ; i++ ){
           for(int j =0; j<nums1.Length-1-i; j++){
               int temp = 0;
               if(nums1[j]>nums1[j+1]){
                   temp = nums1[j];
                   nums1[j] = nums1[j+1];
                   nums1[j+1] = temp;
               }
           }
        }
    }
}
```

{% endtab %}
{% endtabs %}

#### Solution ideas

1. Put nums2 back nums1
2. Bubble sort

**This method is simple but inefficient.**

### Method 2——Current best solution

{% tabs %}
{% tab title="C#" %}

```csharp
public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m-1;
        int j = n-1;
        int index = m+n-1;
        while(i>=0 && j>=0){
            if(nums1[i]>nums2[j]){ // Compare the each last number
                nums1[index--] = nums1[i--];
            }
            else{
                nums1[index--] = nums2[j--];
            }
        }
        while(j>=0){
            nums1[index--] = nums2[j--];
        }                
    }
}
```

{% endtab %}
{% endtabs %}

#### Solution ideas

![](https://firebasestorage.googleapis.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQ_mCmumKBWhxGMRJfj%2Fuploads%2FwxOCYla9DU5quJN4Fafv%2Ffile.png?alt=media)

From The Discuss Forum and link [HERE](https://leetcode.com/explore/learn/card/fun-with-arrays/525/inserting-items-into-an-array/3253/discuss/29522/This-is-my-AC-code-may-help-you)
