題目:調整一陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。
方案一:如果不考慮時間複雜度,最簡單的思路應該是從頭掃瞄這個陣列,每碰到乙個偶數時,拿出這個數字,並把位於這個數字後面的所有數字往前挪動一位。挪完之後在陣列的末尾有乙個空位,這時把該偶數放入這個空位。
分析:由於碰到乙個偶數,需要移動o(n)個數字,因此總的時間複雜度是o(n*n)。
方案二:要求的是把奇數放在陣列的前半部分,偶數放在陣列的後半部分,因此所有的奇數應該位於偶數的前面。也就是說我們在掃瞄這個陣列的時候,如果發現有偶數出現在奇數的前面,我們可以交換他們的順序,交換之後就符合要求了。
因此我們可以維護兩個指標,第乙個指標初始化為陣列的第乙個數字,它只向後移動;第二個指標初始化為陣列的最後乙個數字,它只向前移動。在兩個指標相遇之前,如果第乙個指標指向的數字是偶數而第二個指標指向的數字是奇數,我們就交換這兩個數字。時間複雜度為o(n)。
擴充套件:這道題有很多變種,如要求改成:把負數放在非負數的前面等,思路都是都一樣的。
演算法 調整陣列順序使得奇數在偶數前面
輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。此題運用插入排序 1.遍歷整個陣列,找奇數,找到了往前面插 2.如果該數是奇數,並且前面乙個數是偶數,將該奇數先儲存起來,然後將前面...
N13 調整陣列順序使奇數在偶數前面
輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。1 用空間換時間 新開闢乙個陣列 大小與原來的一樣 遍歷陣列偶數放入新的陣列中,最後將其直接放入原來陣列的最後。2public cl...
演算法題 調整陣列順序使奇數字於偶數前面
輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字予陣列的後半部分。這個題目要求把奇數放在陣列的前半部分,偶數放在陣列的後半部分,因此所有的奇數應該位於偶數的前面。也就是說我們在掃瞄這個陣列的時候,如果發現有偶數出現在奇數的前面,我們可以交換它們的順序...