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)



京公网安备 11010502036488号