题一:不需要奇数和偶数的相对位置不变,即剑指offer里的题目形式,这个比较简单,直接用两个指针分别指向头尾,然后向中间逼近,遇到前偶后奇就将两个指针指向的位置进行交换
public static void reOrderArray(int[] array){
int i=0,j=array.length-1;
while(i<j){
while(i<array.length&&isOdd(array[i]))
i++;
while(j>=0&&!isOdd(array[j]))
j--;
if(i<j){
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
public static boolean isOdd(int i){
return (i&1)!=0;
}
题二:要求奇数位和偶数位的相对位置不变,这个我并没有想到什么好办法,就先用冒泡排序,将相邻两个数前偶后奇的进行交换,经过多次交换后即可
public class Solution {
public void reOrderArray(int [] array) {
int temp;
for(int i=0;i<array.length; i++){
for(int j=0; j<array.length-i-1; j++){
if(!isOdd(array[j]) && isOdd(array[j+1])){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public boolean isOdd(int i){
return (i&1)!=0;
}
}