输出一个数组,使得奇数在其前半部分,偶数在后半部分(java)

题目:实现一个函数,输入参数为一个数组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则为偶数。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值