题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。
void ReorderOddEven_1(int *pData, unsigned int length)
{
if(pData==nullptr||length==0) return;
int pre=0,back=length-1;
while(pre<back)
{
// while(pData[pre]%2!=0&&pre<back) pre++;
// while(pData[back]%2==0&&pre<back) back--;
while((pData[pre]&1)!=0&&pre<back) pre++;
while((pData[back]&1)==0&&pre<back) back--;
int temp=pData[pre];
pData[pre]=pData[back];
pData[back]=temp;
}
}
不过这一题在牛客网上的要求多了一点,要保证奇数和奇数,偶数和偶数之间的相对位置不变。
于是模拟跟冒泡排序类似的算法完成要求,但是时间复杂度是O(),如果借助两个栈也可以实现,时间复杂度为O(n),但需要额外的O(n)空间复杂度,更好的占时没想到。
class Solution {
public:
void reOrderArray(vector<int> &array) {
for(int i=array.size()-1;i>0;i++)
{
bool isSwap=false;
for(int j=0;j<i;j++)
{
if((array[j]&1)==0&&(array[j+1]&1)==1)
{
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
isSwap=true;
}
}
if(!isSwap) break;
}
}
};