题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:前后两个指针,前面寻找偶数,后面寻找奇数,交换。
#include <exception>
#include <iostream>
using namespace std;
bool isEven(int n) { return (n & 1) == 0; }
void Reorder(int *pData, int length, bool (*func)(int)) {
if (pData == NULL || length == 0)
return;
int *pBegin = pData;
int *pEnd = pData + length - 1;
while (pBegin < pEnd) {
while (pBegin < pEnd && !func(*pBegin))
++pBegin;
while (pBegin < pEnd && func(*pEnd))
--pEnd;
if (pBegin < pEnd) {
int temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
}
void ReorderOddEven(int *pData, int length) { Reorder(pData, length, isEven); }
int main() {
int n = 10;
int *pData = new int[n];
for (int i = 0; i < n; i++)
*(pData + i) = 2 * i + 1;
ReorderOddEven(pData, 10);
for (int i = 0; i < n; i++)
cout << *(pData + i) << " ";
return 0;
}