剑指Offer之调整数组顺序使奇数位于偶数前面

思路一:先统计出奇数的个数,就可以知道奇数位置在数组里面哪里结束,然后复制原数组,得到新数组,遍历新数组,先往原数组(这里很关键)里面的书替代成奇数,再将奇数后面的替换成偶数,时间复杂度为O(n),空间复杂度为O(n)

public void reOrderArray(int [] array) {
        int countJishu=0;
        for(int num:array){
            if(!isEven(num)){
                countJishu++;
            }
        }
        //int []help=new int[array.length];
        int []help=array.clone();
        int k=0,q=countJishu;
        for(int num:help){
            if(num%2==1){
                array[k++]=num;
            }else{
               array[q++]=num;
            }
        }
    }
    public boolean isEven(int num){
        return num%2==0;
    }

思路二:利用冒泡排序的思想将偶数都冒到后面去

public void reOrderArray(int [] array) {
        
     //思路二:利用冒泡排序的思想将偶数都冒到后面去
     int len=array.length;
     for(int i=0;i<len-1;i++){
                for(int j=0;j<len-i-1;j++){
                    if(isEven(array[j])&&!isEven(array[j+1])){
                        swap(array,j,j+1);
                    }
                }
    }
}
    public void swap(int arr[],int i,int j){
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        public boolean isEven(int num){
            return num%2==0;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值