一.题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
二.分析:
只完成基本功能的解法,仅适用于初级程序员,需要考虑可扩展性的方法才行,我们需要把整个函数解耦成两部分:一个是判断数字应该在数组前半部分还是后半部分;二是拆分数组的操作。
三.答案:
#include <stdio.h>
bool isEven(int n) {
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;
}
}
}
int main() {
int a[6] = {1, 2, 3, 4, 5, 6};
bool (*pf) (int) = isEven;
for (int i = 0; i < 6; i++) {
printf("%d", a[i]);
}
printf("\n");
reOrder(a, 6, pf);
for (int i = 0; i < 6; i++) {
printf("%d", a[i]);
}
printf("\n");
return 0;
}
四.相关题目:
无