11,调整数组让奇数在数组前面,偶数在数组后面《剑指offer》
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
两种方式:
一种添加o(n)的空间取得o(n)的时间复杂度;
一种不增加空间:冒泡排序,或者插入排序;时间复杂度o(n^2)
代码:
//增加空间
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> odd;
vector<int> even;
int k;
for(k=0;k<array.size();k++){
if(array[k]%2==1) odd.push_back(array[k]);
else even.push_back(array[k]);
}
int i,j;
for(i=0;i<odd.size();i++){
array[i]=odd[i];
}
for(j=0;j<even.size();j++){
array[i+j]=even[j];
}
}
};
//冒泡:
class Solution {
public:
void reOrderArray(vector<int> &array) {
int tmp=0;
for(int i=0;i<array.size();i++){
for(int j=0;j<array.size();j++){
if(array[j]%2==0&&array[j+1]%2==1){
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
};
//插排
class Solution {
public:
void reOrderArray(vector<int> &array) {
int index=0;
for(int i=0;i<array.size();i++){
if(array[i]%2==1){
insertSort(array,index,i);
index++;
}
}
}
void insertSort(vector<int> &array,int index,int target){
int tmp=array[target];
for(int i=target;i>index;i--){
array[i]=array[i-1];
}
array[index]=tmp;
}
};

浙公网安备 33010602011771号