調整陣列順序使奇數位於偶數前面
阿新 • • 發佈:2018-12-11
題目
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。
分析
對於陣列的操作,插入是比較耗時的, 因為要移動插入位置之後的所有元素,騰出一個空位,供元素插入。所以對陣列的操作,儘量是交換不同位置的元素。
因此我們維護兩個指標front和tail,front初始化時指向陣列的第一個數字,它只向後移動;tail指標初始化時指向陣列的最後一個數字,它只向前移動。在兩個指標相遇之前,front指標總是在tail之前。如果front指向的數字是偶數,且tail指標指向的是奇數,則交換兩個數字。
程式碼
public static void reorderOddEven(int [] arr) { if(arr == null || arr.length <= 0) { return; } int front = 0; int tail = arr.length - 1; while(front < tail){ while(front < tail && (arr[front] & 1) == 0){ front++; } while(front < tail && (arr[tail] & 1) == 0) { tail -- ; } if(front < tail) { int temp = arr[front]; arr[front] = arr[tail]; arr[tail] = temp; } } }