调整数组顺序使奇数位于偶数前面(不改变相对位置)

题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

解法一:类似冒泡排序

public class Solution {
    public void reOrderArray(int [] array) {
         
        boolean flag = true;  //是否退出while的标志
        boolean change; //本次有没有交换操作发生
        int temp;
         
        while(flag) {
             
            //每一趟
            change = false;
            for(int i = 0; i <= array.length-2; i++) {
                if(array[i] % 2 == 0 && array[i+1] % 2 != 0) {
                    //前偶,后奇
                    temp = array[i];
                    array[i] = array[i+1];
                    array[i+1] = temp;
                    change = true;
                }
            }
             
            if(change == true) {
                flag = true;
            } else {
                flag = false;
            }
             
        }
    }
}

解法二:类似插入排序

public class Solution {
    public void reOrderArray(int [] array) {
         
        //类似插入排序
        for(int i = 1; i < array.length; i++) {
            int target = array[i];
            //如果target是奇数,需要调整
            if(target % 2 != 0) {
                int j;
                for(j = i-1; j >= 0; j--) {
                    if(array[j] % 2 == 0) {
                        //偶数后移
                        array[j+1] = array[j];
                    } else {
                        //碰到第一个奇数,退出
                        break;
                    }
                }
                array[j+1] = target;
            }
        }
    }
}

你可能感兴趣的:(调整数组顺序使奇数位于偶数前面(不改变相对位置))