题解 | #调整数组顺序使奇数位于偶数前面#

调整数组顺序使奇数位于偶数前面

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;
}
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务