1. 程式人生 > >《劍指Offer》題目:調整數組順序使奇數位於偶數前面

《劍指Offer》題目:調整數組順序使奇數位於偶數前面

code ont else 指向 偶數 span cnblogs for emp

題目描述:調整數組順序使奇數位於偶數前

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

題目分析:

題目的關鍵在於在移位以後,奇數和奇數以及偶數和偶數之間的相對位置保持不變。

Java代碼:

public class ReOrderArray {

    //這種方法不能保證奇數和奇數,偶數和偶數之間的相對位置不變
    public static void reOrderArray(int [] array) {
        if (array.length == 0 || array.length == 1) return
; int p1 = 0; int p2 = array.length-1; int temp = 0; while (p1 < p2){ if (array[p1] %2 == 0){ if (array[p2] % 2 == 0) p2--; else { temp = array[p2]; array[p2] = array [p1]; array[p1]
= temp; p1++; p2--; } }else { p1++; } } } //這種方法可以保證奇數和奇數,偶數和偶數之間的相對位置不變 public static void reOrderArray1(int [] array){ if (array.length == 0 || array.length == 1) return;
int p1 = 0; int p2 = 1; int temp = 0; while ( p2 < array.length){ //如果p1已經指向了偶數,這時開始向後移動p2,直到p2指向奇數,然後開始交換 if (array[p1] % 2 == 0){ if (array[p2] % 2 == 0){ p2++; }else { //為保證相對位置不變,采用移位 temp = array[p2]; for (int i = p2; i > p1; --i){ array[i] = array[i-1]; } array[p1] = temp; } } //如果p1指向的元素為奇數,p1向後移直到指向偶數,此時p2始終位於p1後面一位 else { p1++; p2 = p1+1; continue; } } } public static void main(String[] args){ int [] arr = new int[]{1,-3,4,-6,8,-9,7}; reOrderArray1(arr); for (int i=0; i<arr.length; ++i){ System.out.print(arr[i]+ " "); } } }

《劍指Offer》題目:調整數組順序使奇數位於偶數前面