将一个数组中的奇元素全部移到数组的前半部分,即将奇偶元素分开?
需要调整元素的顺序。先判断数组中的一个元素的奇偶性,如为奇数就往后移。
如何判断一个元素的奇偶性?
- //判断元素的奇偶性
- 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) { if(data == NULL || len == 0) return; 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; }