题解 | #调整数组顺序使奇数位于偶数前面#
调整数组顺序使奇数位于偶数前面
http://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b
//方法一:利用集合
public int[] reOrderArray(int[] array) {
// write code here
int[] arr = new int[array.length];
if (array == null || array.length == 0) {
return arr;
} else {
ArrayList<integer> list1 = new ArrayList<>();
ArrayList<integer> list2 = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 != 0) {
list1.add(array[i]);
} else {
list2.add(array[i]);
}
}
for (int i = 0; i < list1.size(); i++) {
arr[i] = list1.get(i);
}</integer></integer>
for (int i = 0; i < list2.size(); i++) { arr[list1.size() + i] = list2.get(i); } return arr; } } //方法二:利用类似冒泡排序做法 public int[] reOrderArray1(int[] array) { if (array == null || array.length == 0) { return array; } for (int i = 0; i < array.length - 1; i++) {//外层循环控制循环次数 boolean flag = false; //定义一个flag,用于判断一次循环里面是否发生了数据交换 for (int j = 0; j < array.length - 1 - i; j++) { if (array[j] % 2 == 0 && array[j + 1] % 2 != 0) { flag = true; int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } if (flag) { flag = false; //如果在一次循环里如果发生了数据交换,需要将flag重置成false } else { break; //如果在一次循环里面没有发生数据交换,则数据已经按要求排好,停止循环 } } return array; }