调整数组使得奇数都在前面,偶数都在后面

调整数组使得奇数都在前面,偶数都在后面(可扩展到其他形式,如正负等)
分析:可以使用时间复杂度为O(n),空间复杂度也为O(n)的插入算法。新建一个和原来数组一样大小的数组,再遍历数组中的每个元素,如果是奇数,则插入数组的前半部分,如果是偶数,则插入数组的后半部分,这样就可以看成是两端不断往中间扩展直至前后两端相接触为止。
具体代码如下:

package problem2;
/**
 * @author Hutongling
 */
public class 调整数组使奇前偶后 {

    //时间复杂度为o(n),空间复杂度为o(n)
    static void adjustArray1(int[] data){
        if(data==null || data.length==0)
            return ;
        int A[]=new int[data.length];
        int count1=0;
        int count2=data.length-1;
        for(int i=0;i<data.length;i++){
            if((data[i]%2)!=0)      //当为奇数的时候直接插到前面,从前往后走
            {
                A[count1]=data[i];
                count1++;
            }
            if((data[i]%2)==0)      //当为偶数的时候直接插到后面,从后面往前面走,因为不需要考虑偶数内部的顺序,故这样是可以的
                A[count2--]=data[i];
        }
//      for(int i=0;i<data.length;i++){ //处理偶数的情况,按顺序处理,从前往后走
//          if((data[i]%2)==0)
//              A[count1++]=data[i];
//      }
        for(int i=0;i<data.length;i++)
            System.out.print(A[i] + " ");
        System.out.println();
    }

    public static void main(String[] args) {
        int data[]={10,3,5,2,4,6,8,9};
        int data1[]={1,3,5,2,4,6,8,9,1};
        int data2[]={3,3,15,12,14,36,18,39,14};
        adjustArray1(data);
        adjustArray1(data1);
        adjustArray1(data2);
    }
}

结果如下:
3 5 9 8 6 4 2 10
1 3 5 9 1 8 6 4 2
3 3 15 39 14 18 36 14 12

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值