剑指Offer-14-调整数组顺序使奇数位于偶数之前

来源:互联网 发布:淘宝助手电子面单设置 编辑:程序博客网 时间:2024/04/30 00:08

题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:
1、两个指针,1个指向数组前过滤奇数,1个指向数组末尾过滤偶数
2、前向指针不断后移,直至指向偶数或越界
3、后向指针不断迁移,直至指向奇数或越界

#include <iostream>using namespace std;void ReorderOddEven(int *pData, unsigned int length) {    if(pData == NULL || length<=0)        return;    int *pBegin = pData;    int *pEnd = pData + length - 1;    while(pBegin < pEnd) {        //当前指针所指数值为奇数,向后移动,直至指向偶数或到达偶数区临界点        while((*pBegin&0x1) != 0 && pBegin<pEnd)             pBegin++;        //当前指针所指数值为偶数,向前移动,直至指向奇数或到达奇数区临界点         while((*pEnd&0x1) == 0 && pBegin<pEnd)             pEnd--;         if(pBegin<pEnd) {             int t = *pBegin;             *pBegin = *pEnd;             *pEnd = t;         }    }}void print(int *a,int length) {    if(a == NULL || length<=0)        return;    for(int i=0;i<length;i++){        cout<<a[i]<<" ";    }    cout<<endl;}int main() {    //测试实例    //1.奇数全在前,偶数全在后    //2.偶数全在前,奇数全在后    //3.奇偶交叉    //4.一个元素    int a[10] = {1,3,5,7,9,2,4,6,8,10};    int b[10] = {2,4,6,8,10,1,3,5,7,9};    int c[10] = {1,2,3,4,5,6,7,8,9,10};    int d[1] = {1};    ReorderOddEven(a,10);    ReorderOddEven(b,10);    ReorderOddEven(c,10);    ReorderOddEven(d,1);    print(a,10);    print(b,10);    print(c,10);    print(d,1);    return 0;}
0 0