调整数组顺序使奇数位于偶数前面
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整除、正负数等问题。