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

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶

数位于位于数组的后半部分。

可以用两个指针来指向数组,odd指向数组头,只往后移动;even指向数组尾,只往前移动。然后分别循环,

如果odd<even,且odd指向偶数,even指向奇数,则交换odd和even指向的值。

public class Solution {
    public void reOrderArray(int [] array) {
        int odd=0;
        int even=array.length-1;
        while(odd<even){
            while(odd<even&&(array[odd]&1)==1){//指向奇数就往后移动,直到指向偶数
                odd++;
            }
            while(odd<even&&(array[even]&1)==0){//指向偶数就往前移动,直到指向奇数
                even--;
            }
            if(odd<even){
                int temp=array[odd];
                array[odd]=array[even];
                array[even]=temp;
            }
        }
    }
}

 

如果要保持奇数与奇数,偶数和偶数之间的相对位置不变,则可以考虑用一个新的数组,将原数组当中的奇数放

到新数组的前半部分,偶数放到后半部分,然后将得到的新数组覆盖到原来的数组中就可以了。

public class Solution {
    public void reOrderArray(int [] array) {
        int [] result=new int[array.length];
        if(array.length<=0){
            return;
        }
        int odd=0;
        int even=array.length-1;
        for(int i=0;i<array.length;i++){
            if((array[i]&1)==1){//奇数
                result[odd]=array[i];
                odd++;
            }
            
            if((array[array.length-i-1]&1)==0){//偶数
                result[even]=array[array.length-i-1];
                even--;
            }
        }
        for(int i=0;i<array.length;i++){
            array[i]=result[i]; 
        }
    }
}
posted @ 2016-02-10 10:34  黄大仙爱编程  阅读(151)  评论(0编辑  收藏  举报