首页 > 代码库 > 剑指offer之调整数组顺序使奇数位于偶数前面

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

题目要求:

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

解题方法:

  方法一:时间复杂度O(n^2)

    最容易想到:从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位;

  方法二:时间复杂度O(n)

    重新建立一个向量,然后进行两次扫描:第一次扫描奇数,第二次扫描偶数,完毕,不废话,直接上代码:

 1 class Solution{
 2 public:
 3     void reOrderArray(vector<int> &array){
 4         int len = array.size();
 5         vector<int> vec(array.begin(),array.end());
 6         int l = 0;
 7         for(int x: vec){
 8             if(x%2==1){
 9                 array[l++] = x;
10             }
11         }
12         for(int y : vec){
13             if(y%2 == 0){
14                 array[l++] = y;
15             }
16         }
17     }
18 };

 

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