题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
1. 使用冒泡法,将偶数依次向后移动,当偶数之后没有奇数时停止;
2.发现偶数时,继续向下寻找奇数,将找到的奇数拿出,从发现的偶数开始的偶数依次向后移动,将奇数放在空位上。
代码如下:
// 冒泡法
class Solution {
2
public:
3
void reOrderArray(vector<int> &array) {
4
int len = array.size();
5
if (len<2) return;
6
while(len--) {
7
bool change = false;
8
for (int i=0; i<len; i++) {
9
if((array[i]%2==0) && (array[i+1]%2==1)) {
10
int temp = array[i];
11
array[i] = array[i+1];
12
array[i+1] = temp;
13
change = true;
14
}
15
}
16
if (!change) return;
17
}
18
return;
19
}
// 换元法
class Solution {
public:
void reOrderArray(vector<int> &array) {
int len = array.size();
if (len<2) return;
int i = 0;
while(i<len) {
int j = i + 1;
if (array[i]%2==0){
int count = 0;
while (array[j]%2==0) {
if (j==len-1)
return;
j++;
}
count = j - i;
int temp = array[j];
while (count) {
array[i+count] = array[i+count-1];
count--;
}
array[i] = temp;
}
i++;
}
}
};