调整数组顺序,使奇数位于偶数前面

题目描述:给定一个数组,调整顺序,使奇数位于偶数前面,并不改变原有顺序。

思路:两种方法,一种是额外增加一个数组;另一种方法是采用插入排序算法。

方法一:增加数组

方法二:采用插入排序法

将每一个奇数放到前面已排好序列的偶数前方。

代码如下:

<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>

点赞