输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,
并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路一: // 冒泡排序法,如果两个相邻的是前偶后奇数,就交换 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 }