考虑可扩展性的解法:
如果题目改为:数组按照大小分为两部分,所有负数都在非负数的前面。 或者改为分为两部分,能被3整除的放到前面,不能被整除的放到后面。 该如何解决: 大的逻辑框架不用改变,把判断的标准改为一个函数指针。 可以把整个函数分为两个部分:一是判断数字是在数组中的前半段还是后半段。2.拆分数组的操作
bool isEven(int n)//判断是否为偶数{ return (n & 1) == 0;}void ReorderOddEven(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<pEnd) { ++pBegin; } while ((pBegin<pEnd) && func(*pBegin))//函数指针可以直接当函数名进行使用 { --pEnd; } if (pBegin < pEnd) { int temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; } }}测试函数:
int main(){ int number[] = {5,2,6,7,8,9,1}; ReorderOddEven(number, 7); for (int i = 0; i < 7; ++i) { PRintf("%d ", number[i]); } printf("/n"); return 0;}新闻热点
疑难解答