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

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:

在要保证变换之后的奇数和偶数的相对位置不变,

想法就是使用i找到第一个奇数的位置,

使用j从i+1开始往后找到第一个奇数

然后将[i,....,j-1]的位置都向右移动一位,再将j位置找出来的奇数移动到i的位置,i++

直到最后j向后查找不到奇数,就break掉

public class Solution {
    public void reOrderArray(int [] array) {
        //当输入数组为空的时候或者没有元素直接返回
        if(array.length==0||array==null){
            return;
        }
        int i=0,j;
        //循环结束的条件,数组遍历完
        while(i<array.length){
            //最终i为找到第一个奇数的位置
            while(i<array.length&&!isEven(array[i])){
                i++;
            }
            //j就从第一个偶数的位置开始往后找到第一个奇数
            j=i+1;
                while(j<array.length&&isEven(array[j])){
                    j++;
                }
     //找到第一个奇数偶数之后,就将从[i,...,j-1]位置的数整体后移,将找到的奇数在j位置的数字移到i位置然后i++
                      if(j<array.length){
                          //临时将j赋值给tmp
                          int tmp=array[j];
                          for(int j2=j-1;j2>=i;j2--){
                              array[j2+1]=array[j2];
                          }
                          array[i++]=tmp;
                      }else{
                          //当最后没有找到奇数的时候就break
                          break;
                      }
        }
    }
      //判断输入的整数是否为偶数
       boolean  isEven(int n){
           if (n%2==0){
               return true;
           }
           return false;
       }
}

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