11,调整数组让奇数在数组前面,偶数在数组后面《剑指offer》

题目:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:

两种方式:

一种添加o(n)的空间取得o(n)的时间复杂度;

一种不增加空间:冒泡排序,或者插入排序;时间复杂度o(n^2)

代码:

//增加空间
class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> odd;
        vector<int> even;
        int k;
        for(k=0;k<array.size();k++){
            if(array[k]%2==1) odd.push_back(array[k]);
            else even.push_back(array[k]);
        }
        int i,j;
        for(i=0;i<odd.size();i++){
            array[i]=odd[i];
        }
        for(j=0;j<even.size();j++){
            array[i+j]=even[j];
        }
    }
};

  

//冒泡:
class Solution {
public:
  void reOrderArray(vector<int> &array) {
       int tmp=0;
       for(int i=0;i<array.size();i++){
           for(int j=0;j<array.size();j++){
               if(array[j]%2==0&&array[j+1]%2==1){
                   tmp=array[j];
                   array[j]=array[j+1];
                   array[j+1]=tmp;
               }
           }
       }
    }
};

  

//插排
class Solution {
public:
  void reOrderArray(vector<int> &array) {
       int index=0;
       for(int i=0;i<array.size();i++){
         if(array[i]%2==1){
            insertSort(array,index,i);
            index++;
         }
 
       }
    }
    void insertSort(vector<int> &array,int index,int target){
    int tmp=array[target];
    for(int i=target;i>index;i--){
        array[i]=array[i-1];
    }
    array[index]=tmp;
    }
};

  

 

posted @ 2017-09-13 15:52  llauser  阅读(274)  评论(0)    收藏  举报