Q:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
A:1、新建两个数组分别放原数组中的奇数和偶数。
2、将奇数数组中的数复制给原数组
3、将偶数数组中的数复制到原数组奇数的后边
#include <iostream> #include <vector> #include <algorithm> using namespace std; class solution { public: void reOrderArray(vector<int > &Array) // 不考虑相对位置不变的case { int len = Array.size(); int *p = &Array[1]; int *q = &Array[len - 1]; while(q > p) { if(*p % 2 == 0) { if(*q % 2 == 0) { q --; } else { int tmp = *p; *p = *q; *q = tmp; } } else { if(*q % 2 == 0) { q --; } else { p ++; } } } } void _reOrderArray(vector<int > &Array) // 考虑相对位置不变的case { vector<int > even, odd; int num_even = 0; int num_odd = 0; for(int i = 0; i<Array.size(); i++) { if(Array[i]%2 == 0) { even.push_back(Array[i]); num_even ++; } else { odd.push_back(Array[i]); num_odd ++; } } //cout << num_even << " " << num_odd << endl; for(int i = 0; i<num_odd; i++) { Array[i] = odd[i]; } for(int i = 0; i<num_even; i++) { Array[num_odd ++] = even[i]; } } }; int main() { int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; int l = sizeof(a)/sizeof(int); vector<int > v(a, a + l); solution s; s._reOrderArray(v); for(int i = 0; i<v.size(); i++) { cout << v.at(i) << " "; } cout << endl; return 0; }