题解 | #调整数组顺序使奇数位于偶数前面#
调整数组顺序使奇数位于偶数前面
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;
}
查看19道真题和解析