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

链表中倒数第k个结点

http://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a

第一种思路
使用其他容器存答案,再复制到数组array中
public class Solution {
    public void reOrderArray(int [] array) {
        //思路:用一个数组第一遍遍历存奇数,第二遍遍历存偶数
        int[] a = new int[array.length];
        int t=0;
        for(int i = 0;i<array.length;i++){
            if(array[i]%2==1){
                a[t++]=array[i];
            }
        }
        for(int i = 0;i<array.length;i++){
            if(array[i]%2==0){
                a[t++]=array[i];
            }
        }
        for(int i = 0;i<array.length;i++){
        array[i] = a[i];
        }
    }
}
第二种思路
从末尾遍历,若元素为奇数,则在该元素的左边找到最接近的偶数,使得 偶数 与 奇数元素块 互换位置
举例:12346587
首先对元素a[7]=7    8与7互换    12346578
对元素7    6与57互换    12345768
对元素7    4与57互换    12357468
对元素7    2与357互换   13572468
END!!!
public class Solution {
    public void reOrderArray(int [] array) {
           //思路:从末尾遍历,奇数与偶数互换位置
            for(int i = array.length-1;i > 0;i--){  //遍历找到奇数a[i]
                if((array[i]%2) == 1){
                    for(int j = 1;j <= i;j++){   //遍历找到与a[i]左边最接近的偶数a[i-j]
                         if((array[i-j]%2)==0){
                            int t = array[i-j];
                            for(int h = i-j;h <i;h++){   //这是偶数与奇数块(a[i]--a[i-j+1])互换
                                array[h] = array[h+1];
                            }
                            array[i] = t;break;
                        }
                    }
                }
    }
}
}
第三种思路:
类似冒泡排序
public class Solution {
    public void reOrderArray(int [] array) {
           //思路:类似冒泡排序
            for(int i = 0 ; i < array.length -1 ; i++){
                for(int j = array.length - 1;j > 0;j--){
                    if((array[j]%2==1)&&(array[j-1]%2==0)){
                        int t = array[j];array[j]=array[j-1];array[j-1]=t;
                    }
                }
            }
    }
}
------END!



全部评论

相关推荐

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