调整数组顺序,使得奇数总位于偶数前面

来源:互联网 发布:淘宝主图ps无缝拼接 编辑:程序博客网 时间:2024/05/18 12:01

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
#include <iostream>using namespace std;void ReOrderArray(int* arr, int length, bool (*func)(int)){if(arr == NULL || length <=0)return;int* pBegin = arr;int* pEnd = arr + length - 1;int temp;while(pBegin < pEnd){while (pBegin < pEnd && !func(*pBegin))pBegin++;while (pBegin < pEnd && func(*pEnd))pEnd--;if(pBegin < pEnd){temp = *pBegin;*pBegin = *pEnd;*pEnd = temp;}}}bool isEven(int n){if((n & 1) == 0)return true;elsereturn false;}void ReorderOddEven(int* arr, int length){ReOrderArray(arr, length, isEven);}
// ====================测试代码====================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(numbers, length);    PrintArray(numbers, 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 main(int argc, char* argv[]){    Test1();    Test2();    Test3();    Test4();    Test5();    Test6();    return 0;}



0 0
原创粉丝点击