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

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

方法1:

开辟另一个数组,对原有的数组扫描两次,第一次扫描往新的数组中放奇数,第二次放偶数。

public class Solution {
    public void reOrderArray(int [] array) {
        int[] tem=new int[array.length];
        int j =0;
        for(int i =0;i<array.length;i++){
            if((array[i]&1) != 0){
                tem[j++]=array[i];
            }
        }
        for(int i =0;i<array.length;i++){
            if((array[i]&1) == 0){
                tem[j++]=array[i];
            }
        }
        for(int i=0;i<array.length;i++){
            array[i]=tem[i];
        }
    }
}

方法2:用两个标志odd,even,都指向0位置。even从0开始往后移动,遇到偶数继续移动,奇数则停下 和odd换位置 并把odd和even中间的元素依次向后移动,这样做的目的是防止相对位置改变;

public class Solution {
    public void reOrderArray(int [] array) {
        int odd=0,even=0;
        while(even < array.length){
            int tem;
            if((array[even]&1) !=0){ //遇到奇数则交换位置
                tem=array[even];
                for(int i =even;i>odd;i--){//中间的元素向后挪动
                    array[i]=array[i-1];
                }
                array[odd]=tem;
                odd++;
                even++;
            }
            else{
                even ++;
            }
        }
    }
}

 

posted @ 2020-03-05 16:02  nlw  阅读(104)  评论(0编辑  收藏  举报