1、能保证原奇数之间的顺序不变,原偶数之间的顺序不变
import java.util.ArrayList;
public class Solution {
public void reOrderArray(int [] array) {
if(array.length<2) return;
ArrayList<Integer> odd = new ArrayList();
ArrayList<Integer> even = new ArrayList();
for(int i=0;i<array.length;i++)
{
if((array[i] & 0x1) ==1)
odd.add(array[i]);
else
even.add(array[i]);
}
for(int i=0;i<odd.size();i++)
{
array[i] = odd.get(i);
}
for(int i=odd.size();i<array.length;i++)
{
array[i] = even.get(i-odd.size());
}
}
}
2、不能保证第一条,但是不需要额外空间,而且时间效率更高,一个指针指向头,一个指针指向尾,如果第一个指针指向的不是偶数就后移,指向偶数则第二个指针开始移动,移动规则:指向偶数就前移直到指向奇数,否则不动。然后交换这两个数。
public class test {
public void reOrderArray(int [] array) {
if(array.length<2) return;
int indexEven = 0;
int indexOdd = array.length-1;
while(indexEven<indexOdd)
{
while(((array[indexEven]&0x01)==1) && (indexEven<indexOdd))
{
indexEven++;
}
while(((array[indexOdd]&0x01)==0) && (indexEven<indexOdd))
indexOdd--;
int temp = array[indexEven];
array[indexEven] = array[indexOdd];
array[indexOdd] = temp;
}
}
public static void main(String[] args)
{
int[] a=new int[]{1,3,7,2,4,0};
new test().reOrderArray(a);
for(int data:a)
System.out.println(data);
}
}