题目:实现一个函数,输入参数为一个数组Arr,输出该数组,使得奇数在其前半部分,偶数在后半部分。如输入数组为[2,4,6,7,9,10],输出为[7,9,2,4,6,10]。
实现思路:该题目主要目的是将数组中的奇数值放置于数组的前半段,偶数值放置于后半段。
(1)分别从数组的头尾元素开始遍历,将头部出现的第一个偶数元素与尾部出现的第一个奇数元素进行替换,即实现了一组奇偶元素的位置互换;
(2)继续遍历,并重复步骤1,直至数组遍历完全为止;
(3)返回替换后的数组即为我们想要的结果。
public int[] reorderOddEven(int[] pData) {
if(pData==null||pData.length<2) {
return pData;
}
int startIndex=0;
int endIndex=pData.length-1;
while(startIndex<endIndex) {
while((pData[startIndex]&0X1)==1) {//为奇数
startIndex++;
}
while((pData[endIndex]&0x1)==0) {//为偶数
endIndex--;
}
int tmp=pData[startIndex];
pData[startIndex++]=pData[endIndex];
pData[endIndex--]=tmp;
}
return pData;
}
为了进一步提高算法的运行效率,函数中使用位运算而非取余(%)运算来判断元素的奇偶性质,数组中元素与&0x1与运算,值为1表示为奇数,0则为偶数。