1.问题描述
输入一个整形数组,实现一个函数来调整该数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分。(来自《剑指offer》)
2.分析
这个问题只需要定义2个指针,一个指向头一个指向尾,头指针向后遍历当指向偶数时,尾指针向前遍历当指向奇数时,交换2个元素的位置。我们可以将这个代码设计的更具扩展性一些(比如题目改为负数在前,正数在后等等),因此我们使用单独的一个函数来判断数字是不是符合标准。
3.代码
#include <stdio.h>
void ReorderOddEvent(int* array,unsigned int length,int (*fun)(int))
{
if(array == NULL || length <= 0)
{
return;
}
int* begin = array;
int* end =array + length - 1;
while (begin < end)
{
while (begin < end && fun(*begin))
{
begin++;
}
while(begin < end && !fun(*end))
{
end--;
}
if (begin < end)
{
int temp = *begin;
*begin = *end;
*end = temp;
}
}
}
int IsOddNumber(int number)
{
return (number & 1);
}
int main(int argc, const char * argv[])
{
int array[] = {1,2,3,4,5};
ReorderOddEvent(array, 5, IsOddNumber);
printf("Hello, World!\n");
return 0;
}