1. 程式人生 > >輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。

輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。

1、基本實現:

如果不考慮時間複雜度,最簡單的思路應該是從頭掃描這個陣列,每碰到一個偶數時,拿出這個數字,並把位於這個數字後面的所有的數字往前面挪動一位。挪完之後在陣列的末尾有一個空位,這時把該偶數放入這個空位。由於沒碰到一個偶數就需要移動O(n)個數字,因此總的時間複雜度是O(n2).

2、只完成基本功能的解法

題目要求把奇數放在陣列的前半部分,偶數放在陣列的後半部分,因此所有的奇數應該位於偶數的前面,也就是說我們在掃描這個陣列的時候,如果發現有偶數在奇數的前面,我們可以交換他們的數序,交換之後就符合要求了。

因此我們可以維護兩個指標,第一個指標初始化時指向陣列的第一個數字,它只向後移動;第二個指標初始化時指向陣列的最後一個數字,它指向前移動。在兩個指標相遇之前,第一個指標總是位於第二個指標的前面。如果第一個指標的數字是偶數,並且第二個指標指向的數字是奇數,我們就交換兩個數字。