将一个数组中的奇元素全部移到数组的前半部分,即将奇偶元素分开?
需要调整元素的顺序。先判断数组中的一个元素的奇偶性,如为奇数就往后移。
如何判断一个元素的奇偶性?
//判断元素的奇偶性 bool isEven(int data) { return((data & 1) == 0 ? true : false); }
测试如下:
#include<stdio.h> //判断元素的奇偶性 bool isEven(int data) { return((data & 1) == 0 ? true : false); } int main() { int i = 3; if(isEven(i)) { printf("i is even"); } else printf("i is not odd"); return 0; }
实现代码如下:
#include<iostream> using namespace std; //判断元素的奇偶性 bool isEven(int data) { return((data & 1) == 0 ? true : false); } void reOrder(int *data , int len) { int *left = data; int *right = data + len - 1; int temp = 0; while(left < right) { if(!isEven(*left)) //如果左边为奇数 { left++; continue; } if(isEven(*right)) //如果右边为偶数 { right--; continue; } temp = *left; *left = *right; *right = temp; left++; right--; } } int main() { int data[] = {2 , 5 , 4 , 9 , 6 , 4}; int len = sizeof(data)/sizeof(int); reOrder(data , len); for(int i = 0 ; i < len ; i++) { cout<<data[i]<<" "; } cout<<endl; system("pause"); return 0; }