java-54- 调整数组顺序使奇数位于偶数前面

import java.util.Arrays;
import java.util.Random;

import ljn.help.Helper;


public class OddBeforeEven {

	/**
	 * Q 54 调整数组顺序使奇数位于偶数前面
	 * 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
	 * update at 2012-04-20:
	 * "quickSort" is O(nlgn).So it does not work
	 * Now we trade space for time.
	 * Create another array which has the same length as the array to be sorted.
	 * Odd number is inserted from front,Even number from tail.
	 */
	public static void main(String[] args) {

		int[] x=new int[10];
		for(int i=0;i<10;i++){
			x[i]=i;
		}
		System.out.println(Arrays.toString(x));
		sort2(x);
		System.out.println(Arrays.toString(x));
		System.out.println("================================");
		rearrange(x);
		System.out.println(Arrays.toString(x));
		sort(x);
		System.out.println(Arrays.toString(x));
	}

	//O(n)--Odd number is inserted from front,Even number from tail.
	public static void sort(int[] x){
		if(x==null||x.length==0){
			return;
		}
		int len=x.length;
		int[] tmp=new int[len];
		int oddPos=0;
		int evenPos=len-1;
		for(int i=0;i<len;i++){
			if(!isEven(x[i])){
				tmp[oddPos++]=x[i];
			}else{
				tmp[evenPos--]=x[i];
			}
		}
		System.arraycopy(tmp, 0, x, 0, len);
	}
	
	//O(nlgn)--like Quick Sort.Find a even from the beginning and a odd from the last.Swap them.
	public static void sort2(int[] x){
		if(x==null||x.length==0){
			return;
		}
		int len=x.length;
		int i=0;
		int j=len-1;
		while(i<j){
			if(!isEven(x[i])){
				i++;
				continue;
			}
			if(isEven(x[j])){
				j--;
				continue;
			}
			if(isEven(x[i])&&!isEven(x[j])){
				Helper.swap(x,i,j);
			}
			
		}
	}
	public static boolean isEven(int x){
		return (x&1)==0;
	}
/*
20120423 update
1. for i:=1 to n do swap(a[i], a[random(1,n)]);  // 凑合,但不是真正随机
2. for i:=1 to n do swap(a[i], a[random(i,n)]);   // 真正的随机算法
其中,random(a,b)函数用于返回一个从a到b(包括a和b)的随机整数。
*/
	public static void rearrange(int[] x){
		int len=x.length;
		for(int i=0;i<len;i++){
			int j=new Random().nextInt(len);
			Helper.swap(x, i, j);
		}
	}
}

你可能感兴趣的:(java)