class Solution { public: void reOrderArray(vector<int>& array) { int len = array.size(); bool change = false; for (int i = 0; i < len-1; i++) { for (int j = 0; j < len - 1 - i; j++) { if ((array[j] & 0x1) == 0 && (array[j + 1] & 0x1) == 1) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; change = true; } } if (!change) return; else change = false; } } };
1.若不要求奇数偶数相对顺序不变,用两个指针分别指向两头,向中间移动并交换不正确的位置关系。
时间复杂度O(n),空间复杂度O(1)
2.若要求相对顺序不变,但可使用辅助空间,可创建两个辅助数组分别存储奇数和偶数,再拼接在一起。
时间复杂度O(n),空间复杂度O(n)
3.若要求相对顺序不变,且不能使用辅助空间,只能采取冒泡排序的思路,每次至少放一个偶数在最后面。
时间复杂度O(n^2),空间复杂度O(1)