题目描述:给定一个数组,调整顺序,使奇数位于偶数前面,并不改变原有顺序。
思路:两种方法,一种是额外增加一个数组;另一种方法是采用插入排序算法。
方法一:增加数组
方法二:采用插入排序法
将每一个奇数放到前面已排好序列的偶数前方。
代码如下:
<span style="font-size:14px;">#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:
//增加一个数组
void reOrderArray1(vector<int>&array);
//使用插入排序法
void reOrderArray2(vector<int>&array);
};
//方法一
void Solution::reOrderArray1 (vector<int>&array){
int len = array.size();
if (len <= 1)
return;
vector<int> tem;
vector<int>::iterator ite;
ite = array.begin();
for (; ite < array.end();){
if (*ite % 2 == 0){
tem.push_back(*ite);
ite = array.erase(ite);
}
else
ite++;
}
for (int i = 0; i < tem.size(); i++){
array.push_back(tem[i]);
}
}
//方法二
void Solution::reOrderArray2(vector<int>&array){
int len = array.size();
if (len <= 1)
return;
for (int i = 1; i < len; i++){
int tem = array[i];
if (tem % 2){
int j;
for ( j = i - 1; j >= 0&&(array[j]%2)==0; j--){
array[j + 1] = array[j];
}
array[j + 1] = tem;
}
}
}
//测试代码
int main(){
vector<int>tem1;
int a;
while (cin >> a&&a){
tem1.push_back(a);
}
Solution solution1, solution2;
solution1.reOrderArray1(tem1);
cout << "the out is: ";
for (int i = 0; i < tem1.size(); i++){
cout << tem1[i] << " ";
}
cout <<endl<< "---------------------------" << endl;
vector<int>tem2;
int b;
while (cin >> b&&b){
tem2.push_back(b);
}
solution2.reOrderArray2(tem2);
cout << "the out is: ";
for (int i = 0; i < tem2.size(); i++){
cout << tem2[i] << " ";
}
system("pause");
return 0;
}</span>