调整数组顺序使奇数位于偶数前面
这题可以维护2个指针,第一个指针初始化为数组的第一个数字,它向后移动。第二个指针初始化为数组最后一个数,它向前移动。
如果第一个指针指向的是偶数,而第二个指针又指向的是奇数,两者交换,直到2个指针相遇。
bool isEven(int n) //奇数返回false,偶数返回true { return (n&1) == 0; } void Reorder(int *pData,unsigned 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, unsigned int length) { Reorder(pData,length,isEven); }
这里考虑到可扩展性的话将会得到很高分。我们只需别写其他判断函数即可实现不同功能,如把正数和负数分开,把能被3整出的数和不能被3整出的数分开。

浙公网安备 33010602011771号