牛客_调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
在要保证变换之后的奇数和偶数的相对位置不变,
想法就是使用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;
}
}