题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解法一:
新建临时数组,遍历原数组将偶数和奇数分离再拼接到原数组,此方法需要消耗较大空间。
解法二:
步骤一:外层循环,每次循环都是一个新的子数组array[k ,length-1]
步骤二:找到当前子数组的第一个奇数array[i]和第一个偶数array[j](注意子数组全是偶数和全是奇数的处理)
步骤三:如果i>j,就将数组array[j,i-1]的元素依次后移,array[j]=array[i]
步骤四:重复上述步骤,直到k==length-1。
class Solution {
public:
void reOrderArray(vector<int> &array) {
int temp;
for(int i,j, k=0;k<array.size();k++){
i=k;
j=k;
//找到第一个奇数
while(array[i]%2==0&&i<array.size()){
i++;
if(i==array.size()){
i=k;
break;
}
}
//找到第一个偶数
while(array[j]%2==1&&j<array.size()){
j++;
if(j==array.size()){
j=k;
break;
}
}
//依次交换元素位置
if(j<i){
temp=array[i];
for(int l=i;l>j;l--){
array[l]=array[l-1];
}
array[j]=temp;
}
}
}
};