题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分
1》当不考虑奇数与奇数,偶数与偶数的相对位置时:
public class Solution {
public static void main(String[] args) {
int[] array={1,4,6,8,53,756};
reOrderArray(array);
for(int i:array){
System.out.println(i);
}
}
public static void reOrderArray(int [] array) {
if(array==null||array.length==0){
return;
}
int i=0,j=array.length-1;
while(i<j){
while(i<j&&!isEven(array[i])){
i++;
}
while(i<j&&isEven(array[j])){
j--;
}
if(i<j){
swap(array, i, j);
}
}
}
public static void swap(int a[], int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static boolean isEven(int n){
return (n&1)==0;
}
}
结果:1-53-6-8-4-756
2》当添加条件:保证奇数和奇数,偶数和偶数之间的相对位置不变时:
public class Solution {
public static void main(String[] args) {
int[] array={1,4,6,8,53,756};
reOrderArray(array);
for(int i:array){
System.out.println(i);
}
}
public static void reOrderArray(int [] array) {
int[] arraytwo=new int[array.length];
if(array==null||array.length==0){
return;
}
int i=0,j=0;
for(i=0;i<array.length;i++){
if(!isEven(array[i])){
arraytwo[j++]=array[i];
}
}
for(i=0;i<array.length;i++){
if(isEven(array[i])){
arraytwo[j++]=array[i];
}
}
for(i=0,j=0;i<array.length;i++){
array[i]=arraytwo[j++];
}
}
public static boolean isEven(int n){
return (n&1)==0;
}
}
结果:1-53-4-6-8-756