<p>Given an array of integers <code>nums</code>, half of the integers in <code>nums</code> are <strong>odd</strong>, and the other half are <strong>even</strong>.</p>

<p>Sort the array so that whenever <code>nums[i]</code> is odd, <code>i</code> is <strong>odd</strong>, and whenever <code>nums[i]</code> is even, <code>i</code> is <strong>even</strong>.</p>

<p>Return <em>any answer array that satisfies this condition</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [4,2,5,7]
<strong>Output:</strong> [4,5,2,7]
<strong>Explanation:</strong> [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [2,3]
<strong>Output:</strong> [2,3]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>2 &lt;= nums.length &lt;= 2 * 10<sup>4</sup></code></li>
	<li><code>nums.length</code> is even.</li>
	<li>Half of the integers in <code>nums</code> are even.</li>
	<li><code>0 &lt;= nums[i] &lt;= 1000</code></li>
</ul>

<p>&nbsp;</p>
<p><strong>Follow Up:</strong> Could you solve it in-place?</p>

class Solution {
private:
    struct parity_cmp {
        bool operator()(int e1, int e2) const {
            int pf1, pf2;

            pf1 = e1 % 2 == 1;
            pf2 = e2 % 2 == 1;

            return pf1 < pf2;
        }
    };

public:
    vector<int> sortArrayByParityII(vector<int>& nums) {
        int i, j;
        int last;
        struct parity_cmp cmp;

        sort(begin(nums), end(nums), cmp);

        last = nums.size() / 2;

        if (last == 1)
            return nums;

        i = 1;
        j = last;
        if (last % 2 == 1)
            ++j;
        for (;;) {
            swap(nums[i], nums[j]);
            i += 2;
            if (i >= last)
                break;
            j += 2;
        }

        return nums;
    }
};
24600