package java_jianzhioffer_algorithm;
import java.util.ArrayList;
/**
* 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
* 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,
* 并保证奇数和奇数,偶数和偶数之间的相对位置不变。
* @author hexiaoli
*思路:1)笨方法从头到尾遍历:如果偶数在前奇数在后,就交换
* 2)用额外两个数组存储,奇数和偶数,最后在复制回原数组
*/
public class ReOrderArray {
public static void reOrderArray1(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 t = array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
}
}
public static void reOrderArray2(int [] array) {
ArrayList<Integer> arrayOdd = new ArrayList<>();
ArrayList<Integer> arrayEven = new ArrayList<>();
for(int i = 0 ;i<array.length;i++) {
if((array[i]&1) == 0) {
// 将偶数按顺序加入even
arrayEven.add(array[i]);
}else {
// 将奇数按顺序加入odd
arrayOdd.add(array[i]);
}
}
//合并数组
arrayOdd.addAll(arrayEven);
for(int i = 0 ;i<array.length;i++) {
// 将ArrayList的值赋给原数组
array[i]=arrayOdd.get(i);
}
}
public static void main(String[] args) {
int[] array ={1,2,3,4,5};
// reOrderArray1(array);
// for (int i = 0; i < array.length; i++) {
// System.out.println(array[i]);
// }
reOrderArray2(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}