剑指offer 调整数组顺序使奇数位于偶数前面

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:先找到第一个偶数,位置为i,然后从i + 1开始找第一个奇数,将这个奇数保存起来,将[i ,  j - 1]这个区间的元素整体后移一个元素单位,那么第i 个位置就空出来了,然后将第j个位置保存好的奇数拷贝到第i个位置。重复执行操作就得到答案。

 

class Solution {
public:
    bool isEven(int num){
        if(num % 2 == 0){
            return true;
        }
        return false;
    }
    void reOrderArray(vector<int> &array) {
        if(array.size() == 0){
            return;
        }
       
        int i = 0;
         while(i < array.size()){
             for(i;i < array.size();++i){
                 if(isEven(array[i])){
                     break;
                 }
             }
             int j = i + 1;
             for(j;j < array.size();++j){
                 if(!isEven(array[j])){
                     break;
                 }
             }
             if(j < array.size()){
                 int tmp = array[j];
                 for(int k = j - 1;k >= i;--k){
                     array[k + 1] = array[k];
                 }
                 array[i] = tmp;  
             }
             else{
                 break;
             }
        }
    }
};

 

 

 

 

posted @ 2017-09-02 11:15  zqlucky  阅读(152)  评论(0编辑  收藏  举报