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

1.维护两个指针,一个指向第一个 ,向右移动,一个指向最后一个元素,向左移动。当第一个指针指向为偶数,第二个为奇数,就进行交换并移动指针。

  注意:当输入为Null或者length=0时候的情况。

#include "stdafx.h"
#include <iostream>
using namespace std;


void Recorder(int s[],int length)  //自动退化为指针
{
    if(s==NULL||length==0)
        return;
    int *pBegin=s;
    int *pEnd=s+length-1;
    while (pBegin<pEnd)
    {
        //if((*pBegin)%2!=0)
        if((*pBegin&0x1)!=0)    //和0x1 做&运算,相当于让被除数的个位与1做&运算,只有个位才能决定该数是否是偶数或者奇数
            pBegin++;
        if((*pEnd&0x1)==0)
            pEnd--;
        if ((*pBegin&0x1)==0&&(*pEnd&0x1)!=0&&(pBegin<pEnd))
        {
            swap(*pBegin,*pEnd);
            pBegin++;
            pEnd--;
        }
    }
}

int main(int argc, char* argv[])
{
    int s[]={1,2,3,4,5};
    Recorder(s,5);
    for (int i=0;i<5;i++)
        cout<<s[i]<<"  ";
    cout<<endl;
    return 0;
}

 

 说明:

此方法还可以解:

 被3整除、正负数等问题。

posted @ 2014-06-08 22:40  menghuizuotian  阅读(163)  评论(0编辑  收藏  举报