题目:给定一个整数数组,调整数组中数的顺序,使得所有奇数位于数组的前半部分,所有 偶数位于数组的后半部分。
思路一:
使用两个指针,从两边向中间遍历,发现条件不满足,交换
bool IsOddNumber(int data)
{
return (data&1==1);
}
void OddEvenSort(int data[],int length)
{
if(data == NULL || length <= 0)
{
return;
}
int* begin = data;
int end = data + length -1;
while(begin<end)
{
if(IsOddNumber(*begin)) // 若*begin是奇数,begin++
{
begin++;
}
else if(!IsOddNumber(*end)) // 若*end是偶数, end--
{
end--;
}
else // 若*begin和*end 不满足条件,交换
{
swap(*begin,*end);
}
}
}
思路二:
使用两个指针,从头向尾扫描;
bool IsOddNumber(int data)
{
return data&1==1;
}
void OddEvenSort(int data[],int lo,int hi)
{
int i = lo - 1; // 尾指针
for(int j=lo;j<hi;j++) // 头指针
{
if(IsOddNumber[j]) // 当j为奇数时,与i交换
{
i = i + 1;
swap(data[i],data[j]);
}
}
swap(data[i+1],data[hi]); 、、
}