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

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整除、正负数等问题。

你可能感兴趣的:(数组)