1.归并排序法,使用链表或数组容器
import java.util.ArrayList; public class Solution { public void reOrderArray(int [] array) { if(array.length==1||array.length==0) return; merge(array); } public void merge(int[] arr) { ArrayList<Integer> left = new ArrayList(); ArrayList<Integer> right = new ArrayList(); for(int i: arr) { if((i&1)==0)//偶数 { right.add(i); }else{ left.add(i); } } int r = arr.length-1; do{ arr[r--]=right.remove(right.size()-1); }while(right.size()!=0); do{ arr[r--]=left.remove(left.size()-1); }while(left.size()!=0); } }
方法二: 插入排序法
import java.util.ArrayList; public class Solution { public void reOrderArray(int [] array) { if(array.length==1||array.length==0) return; handle(array); } public void handle(int[] arr) { for(int i=0,j;i<arr.length;++i) { if((arr[i]&1)==0) continue;//arr[i] 是奇数,并且前一位是偶数 int curNode = arr[i]; for( j=i;j>0&&(arr[j-1]&1)==0;) { arr[j--]=arr[j]; } arr[j]=curNode; } } }
两种方法,看你是想要快,还是内存小