分析:设置两个指针,第一指针初始化时指向数组的第一个数字,它只向后移动;第二个指针初始化时指向数组的最后一个数字,它只向前移动。在两个指针相遇之前,第一个指针总是位于第二个指针的前面,如果第一个指针指向的数字是偶数,第二个指针指向的数字是奇数,就交换这两个数字。
void ReorderOddEven(int *pData, unsigned int length)
{
if(pData==NULL || length==0)
return;
int *pBegin=pData;
int *pEnd=pData+length-1;
while(pBegin<pEnd)
{
//向后移动pBegin,直到它指向偶数
while(pBegin<pEnd && (*pBegin & 0x1) != 0)
pBegin++;
//向前移动pEnd,直到它指向奇数
while(pBegin<pEnd && (*pEnd & 0x1) == 0)
pEnd--;
if(pBegin < pEnd)
{
int temp=*pBegin;
*pBegin=*pEnd;
*pEnd=temp;
}
}
}