《劍指Offer》第二版之調整數組順序使奇數位於偶數前面(九)

目錄


題目:
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。
思路:
這道題目要求把奇數放在數組的前半部分,偶數放在數組的後半部分,因此所有的奇數應該位於偶數的前面。也就是說,我們在掃描這個數組的時候,如果發現有偶數出現在奇數的前面,則交換它們的順序,交換之後就符合要求了。
步驟:
1.在初始化時,把第一個指針指向數組的第一個數字1,而把第二個指針指向最後一個數字5,第一個指針指向的數字1是一個奇數,不需要處理,我們把第一個指針向後移動,直到碰到一個偶數2。此時第二個指針已經指向了奇數,因此不需要移動,這時候我們發現偶數2位於奇數5的前面,符合交換條件,於是交換這兩個指針指向的數字。
. 2.接下來我們繼續向後移動第一個指針,直到碰到下一個偶數4,並向前移動第二個指針,直到碰到第一個奇數3,我們發現第二個指針已經在第一個指針的前面了,表示所有的奇數都已經在偶數的前面了。
代碼:
package test;

import java.util.Arrays;

public class EvenArray {

	public static void main(String[] args) {
		int[] pData = {1, 2, 3, 4, 5};
		reorder(pData);
		System.out.println(Arrays.toString(pData));
	}
	
	public static void reorder(int[] pData) {
		if(pData == null || pData.length == 0)
			return;
		
		int pBegin = 0;
		int pEnd = pData.length - 1;
		
		while(pBegin < pEnd) {
			//向後移動pBegin,直到它指向偶數
			while(pBegin < pEnd && pData[pBegin] % 2 != 0) 
				pBegin++;
			
			//向前移動pEnd,直到它指向奇數
			while(pBegin < pEnd && pData[pEnd] % 2 == 0)
				pEnd--;
			
			if(pBegin < pEnd) {
				int temp = pData[pBegin];
				pData[pBegin] = pData[pEnd];
				pData[pEnd] = temp;
			}
		}
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章