调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶
数位于位于数组的后半部分。
可以用两个指针来指向数组,odd指向数组头,只往后移动;even指向数组尾,只往前移动。然后分别循环,
如果odd<even,且odd指向偶数,even指向奇数,则交换odd和even指向的值。
public class Solution { public void reOrderArray(int [] array) { int odd=0; int even=array.length-1; while(odd<even){ while(odd<even&&(array[odd]&1)==1){//指向奇数就往后移动,直到指向偶数 odd++; } while(odd<even&&(array[even]&1)==0){//指向偶数就往前移动,直到指向奇数 even--; } if(odd<even){ int temp=array[odd]; array[odd]=array[even]; array[even]=temp; } } } }
如果要保持奇数与奇数,偶数和偶数之间的相对位置不变,则可以考虑用一个新的数组,将原数组当中的奇数放
到新数组的前半部分,偶数放到后半部分,然后将得到的新数组覆盖到原来的数组中就可以了。
public class Solution { public void reOrderArray(int [] array) { int [] result=new int[array.length]; if(array.length<=0){ return; } int odd=0; int even=array.length-1; for(int i=0;i<array.length;i++){ if((array[i]&1)==1){//奇数 result[odd]=array[i]; odd++; } if((array[array.length-i-1]&1)==0){//偶数 result[even]=array[array.length-i-1]; even--; } } for(int i=0;i<array.length;i++){ array[i]=result[i]; } } }