您的位置:首页 > Web前端

《剑指offer》-调整数组顺序使奇数位于偶数前面

2018-01-30 10:24 267 查看
import java.util.*;
/*
* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
* 使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,
* 并保证奇数和奇数,偶数和偶数之间的相对位置不变。
*/
public class ReOrderArray {
//算法一:借助两个list分别存放奇数数字和偶数数字(空间复杂度比较大)
public void reOrderArray(int [] array) {
int length = array.length;
if(length == 0 || length == 1)
return;

List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
for(int i = 0;i < length;i ++) {
if(array[i] % 2 == 1) {	//是奇数
list1.add(array[i]);
}
else
list2.add(array[i]);
}

//重新给数组赋值
for(int i = 0;i < list1.size();i ++) {
array[i] = list1.get(i);
}

for(int i = 0;i < list2.size();i ++) {
array[i + list1.size()] = list2.get(i);
}
}

//算法二:由于奇数存完了之后才能存偶数,先统计奇数的个数,即偶数存放的起点,再将数字存放到辅助数组里
public void reOrderArray2(int [] array) {
if(array.length == 0 || array.length == 1)
return;

int oddCount = 0;
for(int i = 0;i < array.length;i ++) {
if(array[i] % 2 == 1) {	//是奇数
oddCount ++;
}
}

int [] temp = new int[array.length];
int oddBegin = 0;
for(int i = 0;i < array.length;i ++) {
if(array[i] % 2 == 1) {
temp[oddBegin ++] = array[i];
}
else {
temp[oddCount ++] = array[i];
}
}

for(int i = 0;i < array.length;i ++) {
array[i] = temp[i];
}
}

public static void main(String[] args) {

int [] array = {1,2,3,4,5,6};
new ReOrderArray().reOrderArray2(array);
for(int i : array) {
System.out.print(i + " ");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐