14、调整数组顺序使计数位于偶数前面

来源:互联网 发布:淘宝手机寄修靠谱吗 编辑:程序博客网 时间:2024/05/10 19:26
/*调整数组顺序使计数位于偶数前面*/#include "stdafx.h"void Reorder(int *pData, unsigned int length, bool (*func)(int));bool isEven(int n);// ====================方法一====================void ReorderOddEven_1(int *pData, unsigned int length){if(pData == NULL || length == 0)        return;int *pBegin = pData;    int *pEnd = pData + length - 1; while(pBegin < pEnd)     {        // 向后移动pBegin,直到它指向偶数  while(pBegin < pEnd && (*pBegin & 0x1) != 0)            pBegin ++;  // 向前移动pEnd,直到它指向奇数        while(pBegin < pEnd && (*pEnd & 0x1) == 0)            pEnd --;if(pBegin < pEnd)        {            int temp = *pBegin;            *pBegin = *pEnd;            *pEnd = temp;        } }}// ====================方法二====================void ReorderOddEven_2(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)     {// 向后移动pBegin        while(pBegin < pEnd && !func(*pBegin))            pBegin ++;// 向前移动pEnd        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 numbers[], int length){if(length < 0)        return;for(int i = 0; i < length; ++i)        printf("%d\t", numbers[i]); printf("\n");}void Test(char* testName, int numbers[], int length){if(testName != NULL)        printf("%s begins:\n", testName);int* copy = new int[length];for(int i = 0; i < length; ++i)    {        copy[i] = numbers[i];    }printf("Test for solution 1:\n");PrintArray(numbers, length);ReorderOddEven_1(numbers, length);PrintArray(numbers, length);printf("Test for solution 2:\n");    PrintArray(copy, length);ReorderOddEven_2(copy, length);PrintArray(copy, length);delete[] copy;}void Test1(){int numbers[] = {1, 2, 3, 4, 5, 6, 7};Test("Test1", numbers, sizeof(numbers)/sizeof(int));}void Test2(){    int numbers[] = {2, 4, 6, 1, 3, 5, 7};    Test("Test2", numbers, sizeof(numbers)/sizeof(int));}void Test3(){    int numbers[] = {1, 3, 5, 7, 2, 4, 6};    Test("Test3", numbers, sizeof(numbers)/sizeof(int));}void Test4(){    int numbers[] = {1};    Test("Test4", numbers, sizeof(numbers)/sizeof(int));}void Test5(){    int numbers[] = {2};    Test("Test5", numbers, sizeof(numbers)/sizeof(int));}void Test6(){    Test("Test6", NULL, 0);}int _tmain(int argc, _TCHAR *argv){//Test1();//Test2();    //Test3();    //Test4();    //Test5();    Test6();return 0;}

0 0
原创粉丝点击