调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
因为这道题目给定的方法没有返回值,也就是说我们最后要改变原数组,所以我考虑直接在原数组上面操作。
我的想法大致是这样的:
先记录下第一个偶数的位置evenIndex,然后从这个位置往后找,直到找到一个奇数。这样在evenIndex和这个奇数之间就全都是偶数了,将所有偶数往后移动一个位置,再将这个奇数插入到第一个偶数的位置,这样就完成了一个奇数位置的调整。不过还要改变一下evenIndex的位置,因为它已经向后移动了一个位置。按照这个方法,遍历一遍数组也就调整好了奇数和偶数的位置了。
1 public void reOrderArray(int [] array) { 2 int evenIndex = array.length; 3 4 //记录第一个偶数的位置 5 for (int i=0; i<array.length; i++) { 6 if (array[i] % 2 == 0) { 7 evenIndex = i; 8 break; 9 } 10 } 11 12 for (int i=evenIndex+1; i<array.length; i++) { 13 14 if (array[i] % 2 != 0) { 15 int temp = array[i]; 16 for (int j=i; j>evenIndex; j--) { 17 array[j] = array[j-1]; 18 } 19 array[evenIndex] = temp; 20 evenIndex++; 21 } 22 } 23 }