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