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

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
http://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

没有辅助空间

找到一个奇数,一个偶数然后逐次向后移动
 1 class Solution {
 2 public:
 3     void reOrderArray(vector<int> &array) {
 4         if(array.empty())
 5             return;
 6         int len = array.size();
 7         int i = 0;
 8         int j;
 9         while(i < len)
10         {
11             while(i < len && !isEven(array[i]))
12                 i++;
13             j = i + 1;
14             while(j < len && isEven(array[j]))
15                 j++;
16             if(j < len)
17             {
18                 int temp = array[j];
19                 for(int q = j - 1; q >= i;q--)
20                 {
21                     array[q+1] = array[q];
22                 }
23                 array[i] = temp;
24                 i++;
25             }
26             else
27                 break;
28         }
29             
30     }
31     bool isEven(int n)
32     {
33         if(n % 2 == 0)
34             return true;
35         else
36             return false;
37     }
38 };

 

辅助空间

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> vec;
        vector<int>::iterator ite = array.begin();
        while(ite != array.end())
        {
            if(*ite % 2 != 0)
                vec.push_back(*ite);
            ite++;
        }
        ite = array.begin();
         while(ite != array.end())
        {
            if(*ite % 2 == 0)
                vec.push_back(*ite);
              ite++;
        }
        array = vec;
        
    }
};

 

posted on 2016-08-26 10:34  已停更  阅读(266)  评论(0)    收藏  举报