c++
空间换时间
1 class Solution { 2 public: 3 void reOrderArray(vector<int> &array) { 4 vector<int> res1; 5 vector<int> res2; 6 for(int i=0;i<array.size();i++){ 7 if(array[i]%2==0) res2.push_back(array[i]); 8 else res1.push_back(array[i]); 9 } 10 res1.insert(res1.end(),res2.begin(),res2.end()); 11 array = res1; 12 } 13 };
时间换空间
1 class Solution { 2 public: 3 void reOrderArray(vector<int> &array) { 4 //先找第一个偶数,因为是要将偶数向后移动的 5 int length = array.size(); 6 for(int i=0;i<length;i++){ 7 if(array[i]%2==0){ 8 //在找这个偶数后面的第一个奇数 9 for(int j=i;j<length;j++){ 10 if(array[j]%2==1){ 11 int temp=array[j]; 12 while(j>i){ 13 array[j]=array[j-1]; 14 j--; 15 } 16 array[i]=temp;//此时的i位置已经是奇数了,继续下一轮i的循环 17 break; 18 } 19 } 20 } 21 } 22 } 23 };
类似于冒泡排序
1 class Solution { 2 public: 3 void reOrderArray(vector<int> &array) { 4 5 6 for (int i = 0; i < array.size();i++) 7 { 8 for (int j = array.size() - 1; j>i;j--) 9 { 10 if (array[j] % 2 == 1 && array[j - 1]%2 == 0) //前偶后奇交换 11 { 12 swap(array[j], array[j-1]); 13 } 14 } 15 } 16 } 17 };