题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
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; } };