劍指offer(13):調整陣列順序使奇數位於偶數前面
阿新 • • 發佈:2020-08-20
題目描述
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 思路: 其實該題目是一道排序題,由於題目要求相對位置不變,因此我們需要使用穩定的排序演算法,插入排序或者氣泡排序 插入排序,就是每次掃描到奇數時,就把它插入到上一個奇數的後面,因此,需要將這一節的偶數整體向後移動,時間複雜度為O(n^2) 氣泡排序即每次遇到偶數在前奇數在後的情況,就交換兩者的位置,時間複雜度也為O(n^2) 也可以犧牲空間換取時間,定義一個數組,如果遇到奇數原陣列不變,如果遇到偶數,將該數插入到新陣列中,然後從原陣列移除該元素,最後將新陣列拼接在原陣列後面class Solution { public: void reOrderArray(vector<int> &array) { int odd = -1;//奇數指標 int temp; for(int i=0;i<array.size();i++){ if(array[i] % 2 == 1){ temp = array[i]; for(intj=i;j> odd+1;j--){ array[j] = array[j-1]; } array[++odd] = temp; } } } };