题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
1、思路分析
用的双指针,一开始我是让两个指针指向相邻位置,并且只循环一次,最后得到了错误的结果,分析发现,如果有一个奇数在两个连续的偶数的后面,则不能进行正常的交换,但每次循环之后,能保证最右边的偶数移到了循环的最后一个位置。因此,用了两层循环。第一层循环用来控制第二层循环的结束位置,依次保证每次循环遍历的最后一个位置为偶数,这个“窗口”不断向左扩充,最后就完成了题目完成的奇偶之间的交换。
2、代码
public class Solution { public void reOrderArray(int [] array) { for(int i = 0; i < array.length-1; i++) { for(int j = 0; j < array.length-1-i;j++){ if((array[j]%2==0) && (array[j+1]%2==1)) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } } }