1. 程式人生 > 實用技巧 >劍指offer(13):調整陣列順序使奇數位於偶數前面

劍指offer(13):調整陣列順序使奇數位於偶數前面

題目描述

輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 思路: 其實該題目是一道排序題,由於題目要求相對位置不變,因此我們需要使用穩定的排序演算法,插入排序或者氣泡排序 插入排序,就是每次掃描到奇數時,就把它插入到上一個奇數的後面,因此,需要將這一節的偶數整體向後移動,時間複雜度為O(n^2) 氣泡排序即每次遇到偶數在前奇數在後的情況,就交換兩者的位置,時間複雜度也為O(n^2) 也可以犧牲空間換取時間,定義一個數組,如果遇到奇數原陣列不變,如果遇到偶數,將該數插入到新陣列中,然後從原陣列移除該元素,最後將新陣列拼接在原陣列後面
如果改題目不要求相對位置,那麼我們就可以使用快排的思想來做 C++實現插入排序思想:
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(int
j=i;j> odd+1;j--){ array[j] = array[j-1]; } array[++odd] = temp; } } } };