目錄
題目:
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。思路:
這道題目要求把奇數放在數組的前半部分,偶數放在數組的後半部分,因此所有的奇數應該位於偶數的前面。也就是說,我們在掃描這個數組的時候,如果發現有偶數出現在奇數的前面,則交換它們的順序,交換之後就符合要求了。步驟:
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;
}
}
}
}