题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
分析
归并排序法,使用链表或数组容器
代码
import java.util.ArrayList;
public class Solution {
public void reOrderArray(int [] array) {
if(array.length==1||array.length==0) return;
merge(array);
}
public void merge(int[] arr)
{
ArrayList<Integer> left = new ArrayList();
ArrayList<Integer> right = new ArrayList();
for(int i: arr)
{
if((i&1)==0)//偶数
{
right.add(i);
}else{
left.add(i);
}
}
int r = arr.length-1;
do{
arr[r--]=right.remove(right.size()-1);
}while(right.size()!=0);
do{
arr[r--]=left.remove(left.size()-1);
}while(left.size()!=0);
}
}
总结
- 若判断一个数的奇偶性,当然可以判断除以2的余数,但是也可以用与运算,与1相与,这样效率更高。
- array 与 ArrayList之间的转换方式也很有趣。ArrayList相对于array来说,与数组不同,数组一旦创建,长度固定,但是ArrayList的长度是动态的,不受限制,可以存储任意多的对象。
- for(int i: arr): 这是java中的foreach语句,作用是遍历数组arr中的所有元素。在这之后如果编写输出程序,会输出arr中的所有元素。