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

1、能保证原奇数之间的顺序不变,原偶数之间的顺序不变

import java.util.ArrayList;
public class Solution {
    public void reOrderArray(int [] array) {
        if(array.length<2) return;
        ArrayList<Integer> odd = new ArrayList();
        ArrayList<Integer> even = new ArrayList();
        for(int i=0;i<array.length;i++)
        {
            if((array[i] & 0x1) ==1)
                odd.add(array[i]);
            else
                even.add(array[i]);
        }
        for(int i=0;i<odd.size();i++)
        {
            array[i] = odd.get(i);
        }
        for(int i=odd.size();i<array.length;i++)
        {
            array[i] = even.get(i-odd.size());
        }
    }
}

2、不能保证第一条,但是不需要额外空间,而且时间效率更高,一个指针指向头,一个指针指向尾,如果第一个指针指向的不是偶数就后移,指向偶数则第二个指针开始移动,移动规则:指向偶数就前移直到指向奇数,否则不动。然后交换这两个数。

public class test {

    public void reOrderArray(int [] array) {
        if(array.length<2) return;
    int indexEven = 0;
    int indexOdd = array.length-1;
    while(indexEven<indexOdd)
    {
        while(((array[indexEven]&0x01)==1) && (indexEven<indexOdd))
        {
            indexEven++;
        }
        while(((array[indexOdd]&0x01)==0) && (indexEven<indexOdd))
            indexOdd--;
        int temp = array[indexEven];
        array[indexEven] = array[indexOdd];
        array[indexOdd] = temp;
    }

    }
    public static void main(String[] args)
    {
        int[] a=new int[]{1,3,7,2,4,0};
        new test().reOrderArray(a);
        for(int data:a)
           System.out.println(data);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值