面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组前半部分,所有偶数位于后半部分。
分析:第一反应想到了快速排序时的方法,从后往前找第一个奇数,从前往后找第一个偶数,找到后交换,直到两个指针相等。实现代码也和快速的代码很想。
void ReorderOddEven(int *pData,int length){
if(pData == NULL || length == 0){
return;
}
int *pBegin = pData;
int *pEnd = pData + length - 1;
while(pBegin<pEnd){
while(pBegin<pEnd && (*pBegin)%2 != 0){
pBegin++;
}//从前往后找偶数
while(pBegin<pEnd && (*pEnd)%2 == 0){
pEnd--;
}
if(pBegin<pEnd){
int temp = *pBegin;
*pBegin = *pEnd;
*pEen = temp;
}
}
}