题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
提示:归并排序
class Solution {
void mergeRank(vector<int> &array,int L1,int R1,int L2,int R2)
{
vector<int> temp;
int i=L1,j=L2;
while(i<=R1&&j<=R2)
{
if(array[i]%2==1)
{
temp.push_back(array[i]);
i++;
}
else if(array[i]%2==0 && array[j]%2==1)
{
temp.push_back(array[j]);
j++;
}
else
{
temp.push_back(array[i]);
i++;
}
}
while(i<=R1)
{
temp.push_back(array[i]);
i++;
}
while(j<=R2)
{
temp.push_back(array[j]);
j++;
}
for(int i=L1;i<=R2;i++)
{
array[i]=temp[i-L1];
}
}
void mergeSort(vector<int> &array,int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
mergeSort(array,left,mid);
mergeSort(array,mid+1,right);
mergeRank(array,left,mid,mid+1,right);
}
}
public:
void reOrderArray(vector<int> &array) {
int len=array.size();
if(len==0) return;
mergeSort(array,0,len-1);
}
};