您的位置:首页 > 其它

算法题目---调整数组顺序使奇数位于偶数前面

2017-07-07 09:11 363 查看
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,

使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

void record1(int *pData,unsigned int length)

{

    if(pData == NULL || length == 0)

        return;

    

    int *pBegin = pData;

    int *pEnd = pData + length -1;

    

    while(pBegin < pEnd)

    {

        while(pBegin < pEnd && (*pBegin & 0x1) != 0)

            pBegin++;

        while(pBegin < pEnd && (*pEnd & 0x1) == 0)

            pEnd--;

        

        if(pBegin < pEnd)

        {

            int tmp = *pBegin;

            *pBegin = *pEnd;

            *pEnd = tmp;

        }

    }

}

bool isEven(int n)

{

    return (n & 1) == 0;

}

void record(int *pData,unsigned int len,bool (*func)(int))

{

    if(pData == NULL || len == 0)

        return ;

    

    int *pBegin = pData;

    int *pEnd = pData + len -1;

    

    while(pBegin < pEnd)

    {
        while(pBegin < pEnd && !func(*pBegin))

            pBegin++;

        while(pBegin<pEnd && func(*pEnd))

            pEnd--;

        if(pBegin < pEnd)

        {

            int tmp = *pBegin;

            *pBegin = *pEnd;

            *pEnd = tmp;            

        }

    }

}

void record2(int *pData,unsigned int len)

{

    record(pData,len,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* name,int *num,int len)

{

    if(name != NULL)

        printf("%s begins:\n",name);

        

    int *copy = new int[len];

    for(int i=0;i<len;++i)

    {

        copy[i] = num[i];

    }

    printf("test for solution 1:\n");

    PrintArray(copy, len);

    record1(copy,len);

    PrintArray(copy, len);

        

    printf("test for solution 2:\n");

    PrintArray(copy, len);

    record2(copy,len);

    PrintArray(copy, len);

    

    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()

{

    Test1();

    Test2();

    Test3();

    Test4();

    Test5();

    Test6();

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐