1. 程式人生 > >原 java調整資料順序是奇數位於偶數的前面(思路與實現)

原 java調整資料順序是奇數位於偶數的前面(思路與實現)

題目描述

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

思路一:

首先這個演算法我剛剛開始想到的辦法是我將這個陣列有多少個奇數求出來,然後我就知道偶數從陣列哪個地方開始放資料,比如int[] array = {1, 2, 5, 4, 6, 8, 7},這個時候奇數有三個,那麼偶數就從這個陣列的第四個開始存,奇數從第0個開始存。那麼此時我就遍歷這個陣列,然後發現一個奇數就和該陣列的奇數位置換,這樣就會導致最後相對位置發生變化,所以這個解決辦法就是建立一個和array這個陣列一樣大小的陣列,然後遍歷傳進來的陣列,遇到奇數則存到前面部分,遇到偶數則存到後面的部分,前面部分和後面部分的分界線就是之前求的這個奇數個數。

綜合來說就是:遍歷這個陣列得到哪些位置應該存奇數,哪些位置應該存偶數,然後在遍歷這個陣列,遇到奇數則放到依次放到奇數的位置,遇到偶數則依次放到偶數的位置。

實現:

public class Solution { public void reOrderArray(int [] array) { int length = array.length; int count = 0; if(length == 0){ return; } for(int i = 0; i < length; i++){ if(array[i] % 2 != 0){ count++; } } int[] temp = new int[length]; int a = 0; int b = count; for(int j= 0; j < length; j ++){ if(array[j] % 2 == 0){ temp[b++] = array[j]; }else{ temp[a++] = array[j]; } } for(int i = 0; i < length; i ++){ array[i] = temp[i]; } } }

思路二:

這個方法則是利用類似冒泡的方法,從這個陣列的最後往前一個一個進行比較,如果前偶後奇,則兩個資料交換位置。否則位置不變。

實現:

public void reOrderArray(int [] array) { int length = array.length; for(int i = 0; i < length; i ++){ for(int j = length - 1; j > 0; j --){ if(array[j] % 2 == 1 && array[j - 1] % 2 == 0){ int temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } }