题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
维护两个指针,第一个指针初始化为指向数组的第一个数字,它只能往后移;第二个指针初始化为指向数组的最后一个数字,它只能往前移。在两个指针相遇之前,如果第一个指针指向的数字为偶数,并且第二个指针指向的数字为奇数,则交换两个数字。
代码
#include<iostream>
using namespace std;
void Reorder(int*pdata,int length)
{
int first=0;
int second=length-1;
while(first<second)
{
while(((pdata[first]&0x1)!=0)&&(first<second))
{
first++;
}
// 错误写法:while((pdata[second]&0x1==0)&&(first<second)) ==0前面的值要括起来
while(((pdata[second]&0x1)==0)&&(first<second))
{
second--;
}
if(first<second)
{
int temp=pdata[first];
pdata[first]=pdata[second];
pdata[second]=temp;
}
}
}
int main()
{
int pdata[]={2,3,4,6};
Reorder(pdata,4);
for(int i=0;i<4;i++)
cout<<pdata[i]<<'\t';
}