调整数组顺序使奇数位于偶数前面 --剑指offer
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
方法1:
开辟另一个数组,对原有的数组扫描两次,第一次扫描往新的数组中放奇数,第二次放偶数。
public class Solution { public void reOrderArray(int [] array) { int[] tem=new int[array.length]; int j =0; for(int i =0;i<array.length;i++){ if((array[i]&1) != 0){ tem[j++]=array[i]; } } for(int i =0;i<array.length;i++){ if((array[i]&1) == 0){ tem[j++]=array[i]; } } for(int i=0;i<array.length;i++){ array[i]=tem[i]; } } }
方法2:用两个标志odd,even,都指向0位置。even从0开始往后移动,遇到偶数继续移动,奇数则停下 和odd换位置 并把odd和even中间的元素依次向后移动,这样做的目的是防止相对位置改变;
public class Solution { public void reOrderArray(int [] array) { int odd=0,even=0; while(even < array.length){ int tem; if((array[even]&1) !=0){ //遇到奇数则交换位置 tem=array[even]; for(int i =even;i>odd;i--){//中间的元素向后挪动 array[i]=array[i-1]; } array[odd]=tem; odd++; even++; } else{ even ++; } } } }