資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數不需要有序)
阿新 • • 發佈:2018-11-08
處理策略是定義兩個指標pHead,pTail並令其初始指向陣列頭節點和尾節點。pHead從前往後找應該放在尾部的偶數節點,pTail從後往前找應該放在頭部的奇數節點,若pHead位於pTail之前則交換二者內容,否則結束處理過程。
處理流程如下圖所示。從圖中可以看出時間複雜度為O(n)。下面程式碼中外層的迴圈是接著上次交換後的front和end繼續走的,所以是O(n).
對於用例: 1,2,4,5,3
處理結果為:1,3,5,4,2
下面給出在java語言下的實現:
import java.util.Arrays; public class OddEvenNumber { public static void change(int a[]) //將陣列a中奇數放在前面,偶數放在後面 { int len = a.length; if(len <= 0) //陣列長度為0則返回 return ; int front = 0, end = len-1;//設定兩個指標,一個指向頭部,一個指向尾部 while(front<end)//因為這裡是接著上次交換後的front和end繼續走的,所以是O(n) { // while(front<len && (a[front]&1)==1) //從前往後找偶數 while(front<len && a[front]%2==1) //從前往後找偶數,前面如果是奇數,那麼繼續往後走 front++; while(end>=0 && a[end]%2==0) //從後往前找奇數,如果後面是偶數,那麼繼續往前走 end--; if(front<end)//每次互換一組奇數和偶數 { int swap = a[front]; //將奇數往前挪,偶數往後挪 a[front] = a[end]; a[end] = swap; } } } public static void main(String[] args) { int[] arr = {1,2,5,2,4,7,12,3,57,100,5}; change(arr); System.out.println(Arrays.toString(arr)); } }
轉自https://blog.csdn.net/u010033948/article/details/51025075?utm_source=copy