将数组中奇数放在偶数的前面,且奇数和奇数之间,偶数和偶数之间相对顺序不变。
思路:
1. 先找到第一个偶数
2. 在找到连续偶数区
3. 每遇到一个奇数则偶数区整体向右移动一个位置。
bool func (int a)
{
return a%2;
}
void reOrderArray(vector<int> &a, bool (*func) (int)) {
int i = 0, j = 0;
int length = a.size();
while(j < length)
{
if(func(a[i]))
//if(a[i]%2 == 1)
{
j++;
i++;
}else{
while(!func(a[i]))
//while(a[j]%2 == 0)
{
j++;
}
if(j < length)
{
int temp = a[j];
int k = j;
while(k > i)
{
a[k] = a[k-1];
k--;
}
a[i] = temp;
i++;
}
}
}
}