题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
代码1: 类似于快速排序的思想
class Solution {
public:
vector<int> exchange(vector<int>& a) {
int low=0 , high=a.size()-1;
while(low<high){
while(a[high]%2!=1 && high>low) high--;//从前往后找奇数
while(a[low]%2!=0 && high>low) low++;
swap(a[high],a[low]);
--high;
++low;
}
return a;
}
};
完整程序测试:
#include<iostream>
#include<vector>
#include<algorithm> //sort()
#include <cstdlib>//srand(),rang()
#include <ctime>
using namespace std;
vector<int> exchange(vector<int>& a) {
int low=0 , high=a.size()-1;
while(low<high){
while(a[high]%2!=1 && high>low) high--;//从前往后找奇数
while(a[low]%2!=0 && high>low) low++;
swap(a[high],a[low]);
--high;
++low;
}
return a;
}
int main(){
vector<int> a;
srand(time(NULL));
for(int i=0;i<10;++i)
{
a.push_back(rand()%100+1); //结论产生随机数范围:[m,n],int a=m+rand()%(n-m+1);
}
exchange(a);
for(int i=0;i<10;++i){
cout<<a[i]<<' ';
}
return 0;
}