题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
分析
第一种:
1、新建两个数组分别放原数组中的奇数和偶数。
2、将奇数数组中的数复制给原数组
3、将偶数数组中的数复制到原数组奇数的后边
复杂度O(n),空间复杂度O(n)
第二种:
用冒泡方法,把奇数冒泡到前方,复杂度O(n^2),空间复杂度O(n)
代码实现
void reOrderArray(vector<int> &array) {
int n = array.size();
int ind_last_odd = 0;
for(int i = 0;i<n;i++){
if(array[i]&0x01){
for(int j = i;j>ind_last_odd;j--){
swap(array[j],array[j-1]);
}
ind_last_odd ++;
}
}
}
int ind_last_odd = 0;
for(int i = 0;i<n;i++){
if(array[i]&0x01){
for(int j = i;j>ind_last_odd;j--){
swap(array[j],array[j-1]);
}
ind_last_odd ++;
}
}
}