14. 调整数组顺序使奇数位于偶数前面

来源:互联网 发布:sql查询语句 编辑:程序博客网 时间:2024/05/24 01:31

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

解析

注意代码的重用性构建。

实现

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--;        }        //pBegin<pEnd,交换奇数和偶数        if (pBegin < pEnd){            int tmp = *pBegin;            *pBegin = *pEnd;            *pEnd = tmp;        }    }}

代码重用性

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;}
0 0
原创粉丝点击