(《劍指Offer》筆記)調整數組順序使奇數位於偶數前面

題目:輸入一個整數數組,實現一個函數,來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。

分析:這是一個將數組按照某個二分法標準分成左右兩堆的題目。可以考慮類似快速排序的方法。爲了使程序便於擴展,分類標準採用接口。

	/** 將數組調整成左奇右偶
	 * @param data
	 */
	public void reOrderOddEven(int[] data){
		reOrder(data,new Stantard(){

			@Override
			public boolean isSthByStandard(int n) {
				// TODO 自動生成的方法存根
				return (n&0x1)==0;//偶數返回true,奇數返回false
			}});
	}
	
	/**
	 * 分類標準
	 */
	public interface Stantard{
		boolean isSthByStandard(int n);
	}

	/**類似於快速排序(小於樞軸元素放左邊,大於樞軸元素放右邊),該函數按條件將元素劃分成兩部分,一些放左邊,一些放右邊
	 * @param data
	 */
	public void reOrder(int[] data,Stantard standard){
		int first=0,last=data.length-1;
		while(true){
			while((first<last)&&!standard.isSthByStandard(data[first]))//左邊
				first++;
			while((first<last)&&standard.isSthByStandard(data[last]))//右邊
				last--;
			if(first>=last)
				break;
			swap(data,first++,last--);
		}
	}
	/** 交換數組中兩個元素的位置
	 * @param data
	 * @param i
	 * @param j
	 */
	private void swap(int[] data, int i, int j) {
		// TODO 自動生成的方法存根
		int temp=data[i];
		data[i]=data[j];
		data[j]=temp;
	}



發佈了54 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章