//两头向中间查找
1. 包括※号移动位置.
2. 数字移动位置
3. 字符串移动位置,等都可以按照这个办法进行移动,节省时间
#include "stdafx.h"
#include <stdlib.h>
bool isEven(int n);
void ReOrder(int *pData, unsigned int length, bool (*func)(int));
void ReorderOddEven(int *pData, unsigned int length)
{
ReOrder(pData, length, isEven);
}
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;
}
}
}
bool isEven(int n)
{
return (n & 1) == 0;
}
void printArray(int number[], int length)
{
for (int i = 0; i < length; ++i)
{
printf("%d\t", number[i]);
}
printf("\n");
}
void Test(int number[], int length)
{
printf("Test for soluton\n");
printArray(number, length);
ReorderOddEven(number, length);
printArray(number, length);
}
int _tmain(int argc, _TCHAR* argv[])
{
int number[] = {1, 2, 3, 4, 5, 6, 7};
Test(number, sizeof(number)/sizeof(int));
int number1[] = {1, 1, 1, 6, 7};
Test(number1, sizeof(number1)/sizeof(int));
int number11[] = {0, 0 , 6, 7};
Test(number11, sizeof(number11)/sizeof(int));
system("pause");
return 0;
}