题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
1.空间换时间
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int a[100000];
int b[100000];
void resort(int a[],int n){
vector<int> res;
for(int i=0;i<n;i++){
if(a[i]%2==1){
res.push_back(a[i]);
}
}
for(int i=0;i<n;i++){
if(a[i]%2==0){
res.push_back(a[i]);
}
}
for(int i=0;i<n;i++){
cout<<res[i]<<" ";
}
cout<<endl;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
resort(a, n);
}
2.类似插入排序:
void reOrderArray(vector<int> &array) {
for(int i=0;i<array.size();i++){
if(array[i]%2==1){
int temp=array[i];
int j=i-1;
while(j>=0&&array[j]%2==0){
array[j+1]=array[j];//只要是偶数,向后移动一位
j--;
}
array[j+1]=temp;
}
}
}
3.python大法好
def reOrderArray(self, array):
a = []#保存奇数
b = []#保存偶数
for i in array:
if (i%2):
a.append(i)
else:
b.append(i)
return a+b