调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。例如,数组为{1,2,3,4,5,6,7,8,10,13},输出为{1,3,5,7,13,2,4,6,8,10}。

分析

  可以用类似于冒泡排序的方法来实现,比较每个数和它后一个数的奇偶性,如果出现前偶后奇的情况,例如,题目中的2.3时就让2与3对调位置,第一趟数组序列成为{1,3,2,5,4,7,6,8,13,10}然后进行第二趟扫描数组序列,一直到没有前偶数后奇数的时候停止循环。

代码实现

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
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;j++){
if(array[j]%2==0&&array[j+1]%2==1){
int t = array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
}
}
}

总结

  1. 有点小瑕疵,关于第一层循环的次数可以改为用while的形式如果序列中前偶数后奇数的情况不存在的时候跳出循环,否则表明还没有排列完成就继续互换前偶后奇数的位置。
  2. 可以加一个判断数组为空的情况,如果为空报出异常信息。
  3. 对于需要互换位置的题目,都可以运用这种方法,比较是否符合条件,如果符合就对调位置,然后一次又一次的扫描序列,一直到没有符合条件的情况停止循环。