输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
相对顺序发生变化
class Solution {
public:
void reOrderArray(vector<int> &array)
{
int n = array.size();
if(n <= 1)
return;
int l = 0;
int r = n - 1;
while(l < r)
{
while(l < r && array[l] % 2 == 1)
++l;
while(l < r && array[r] % 2 == 0)
--r;
if(l < r)
{
swap(array[l], array[r]);
}
}
}
};
输入 [1,3,5,7,2,4,6]
输出 [1,7,3,5,4,6,2]
AC
插入排序
class Solution {
public:
void reOrderArray(vector<int> &array)
{
int n = array.size();
if(n <= 1)
return;
int cur = 0;
for(int i=0; i<n; i++)
{
if(array[i] % 2 == 1)
{
if(cur != i)
{
int tmp = array[i];
for(int j=i; j>cur; j--)
array[j] = array[j-1];
array[cur] = tmp;
}
++cur;
}
}
}
};