剑指offer:奇数在前,偶数在后

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

public class Solution {
	public static void main(String[] args)
	{
		int[] testArray= {1,4,3,5,7,6,9};
	//	new Solution().reOrderArray(testArray);
		new Solution().reOrderArrayUseSpace(testArray);
	}
	//不开辟新的空间 使用类似插入排序的方法
    public void reOrderArray(int [] array) {
        
    	int curReadIndex=0;//当前读取位置
    	int orderEndIndex=0;//奇数结束位置
       //当当前读取位置没有打到最后时  循环
    	for(curReadIndex=0;curReadIndex<array.length;curReadIndex++)
    	{
    		if(array[curReadIndex]%2!=0)//如果当前判断值为奇数 
    		{
    			//将其移动到奇数数组结束位置
    			//记录当前奇数值
    			int temp=array[curReadIndex];
    			for(int i=curReadIndex;i>orderEndIndex;i--)//将所有orderEndIndex之前的偶数依次后移
    			{
    				array[i]=array[i-1];//所有偶数依次后移
    			}
    			array[orderEndIndex++]=temp;//将奇数置于此位上 并将下一奇数位+1
    		}
    		//当前判断值为偶数时,跳过
    	}
    }
    //开辟新的空间 用于辅助查找
    public void reOrderArrayUseSpace(int[] array)
    {
    	int[] evenArray=new int[array.length];//开辟新的空间
    	
    	int oddArrayIndex=0;//当前奇数数组的遍历下标
    	int evenArrayIndex=0;//偶数数组遍历下标
    	for(int i=0;i<array.length;i++)//遍历整个数组 
    	{
    		//将所有偶数顺次拷贝到偶数数组中
    		if(array[i]%2==0)
    		{
    			evenArray[evenArrayIndex++]=array[i];
    		}
    		else //改变奇数在原数组中的位置
    		{
				array[oddArrayIndex++]=array[i];
			}
    	}
    	
    	evenArrayIndex=0;//下标置零 重新遍历使用
    	//将偶数组数拷贝到原数组中
    	while(oddArrayIndex<array.length)
    	{
    		array[oddArrayIndex++]=evenArray[evenArrayIndex++];
    	}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值