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

来源:互联网 发布:黑魂3捏脸 防火女 数据 编辑:程序博客网 时间:2024/06/07 01:36
#include<bits/stdc++.h>using namespace std;//=========================方法1=========================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 tmp = *pBegin;            *pBegin = *pEnd;            *pEnd = tmp;        }    }}//=================================方法2====================================//考察可扩展性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 tmp = *pBegin;            *pBegin = *pEnd;            *pEnd = tmp;        }    }}bool isEven(int n){    return (n & 1) == 0;}void ReorderOddEven_2(int* pData, unsigned int length){    Reorder(pData, length, isEven);}int main(){    int numbers[] = {1, 2, 3, 4, 5, 6, 7};    unsigned int len = 7;    ReorderOddEven_1(numbers, len);    for(int *p = numbers; p != numbers + len; p++){        printf("%d\t",*p);    }    printf("\n");    return 0;}

阅读全文
0 0
原创粉丝点击