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


输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,

并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路一: // 冒泡排序法,如果两个相邻的是前偶后奇数,就交换  O(n^2)

代码:

 

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 class Solution {
 5 public:
 6         // 冒泡排序法,如果两个相邻的是前偶后奇数,就交换
 7     void reOrderArray(vector<int> &array)
 8     {
 9         vector<int> arr2;
10         int len = array.size();
11         for(int i = 0; i < len; i++)
12         {
13             for(int j = 0; j < len-1; j++)
14             {
15                 if (array[j] % 2 == 0 && array[j+1] % 2 != 0)
16                 {
17                     int temp = array[j];
18                     array[j] = array[j+1];
19                     array[j+1] = temp;
20                 }
21             }
22         }
23     }
24 };
25 
26 int main()
27 {
28     Solution s;
29     vector<int> vec = {3,4,5,1,2};
30     s.reOrderArray(vec);
31     for(int i = 0; i< vec.size(); i++)
32     {
33         cout << vec[i]<<" ";
34     }
35     return 0;
36 }

 

 

思路二:O(n)但是用了一个辅助数组,牺牲空间换取时间效率

//利用一个辅助数组,先把奇数放进去,然后把偶数放进去,最后把辅助数组的值拷贝给原数组

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 class Solution {
 5 public:
 6     //利用一个辅助数组,先把奇数放进去,然后把偶数放进去,最后把辅助数组的值拷贝给原数组
 7     void reOrderArray(vector<int> &array)
 8     {
 9         vector<int> arr2;
10         int len = array.size();
11         for( int i = 0; i < len; i++)
12         {
13             if (array[i] % 2 != 0)
14                 arr2.push_back(array[i]);
15         }
16         for( int i = 0; i < len; i++)
17         {
18             if (array[i] % 2 == 0)
19                 arr2.push_back(array[i]);
20         }
21         for(int i = 0; i< arr2.size(); i++)
22         {
23             array[i] = arr2[i];
24         }
25         // 也可以进行赋值
26         // array.assign(arr2.begin(),arr2.end());
27     }
28 };
29 int main()
30 {
31     Solution s;
32     vector<int> vec = {3,4,5,1,2};
33     s.reOrderArray(vec);
34     for(int i = 0; i< vec.size(); i++)
35     {
36         cout << vec[i]<<" ";
37     }
38     return 0;
39 }

 

posted @ 2020-03-08 14:39  Lucky&  阅读(245)  评论(0编辑  收藏  举报
//返回顶部开始
//返回顶部结束