# 905. Sort Array By Parity

Given an array `A` of non-negative integers, return an array consisting of all the even elements of `A`, followed by all the odd elements of `A`.

You may return any answer array that satisfies this condition.

**Example 1:**

```
Input: [3,1,2,4]
Output: [2,4,3,1]
The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
```

**Note:**

1. `1 <= A.length <= 5000`
2. `0 <= A[i] <= 5000`

```cpp
// Two pointers with extra space
vector<int> sortArrayByParity(vector<int>& A) { // time: O(n); space: O(n)
    if (A.empty()) return {};
    int n = A.size(), even_ptr = 0, odd_ptr = n - 1;
    vector<int> res(n);
    for (int num : A) {
        if (num & 0x1) { // odd
            res[odd_ptr--] = num;
        } else { // even
            res[even_ptr++] = num;
        }
    }
    return res;
}
```

```cpp
// In-Place Swap
vector<int> sortArrayByParity(vector<int>& A) { // time: O(n); space: O(1)
    for (int i = 0, j = 0; j < A.size(); ++j) {
        if (!(A[j] & 0x1)) swap(A[i++], A[j]);
    }
    return A;
}
```
