100-54

//54.调整数组顺序使奇数位于偶数前面(数组)。
//
//题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,

//所有偶数位于数组的后半部分。要求时间复杂度为O(n)。

思路:

看到这道题目的时候,我第一个想到的就是快速排序中的第一步,就是要用一个哨兵把数组分成两部分,因为那个算法的时间复杂度就是O(n)的,并且最后的结果也是将数组分成了两部分,只是分解的条件不同罢了。所以只要想到这一点就比较简单了。

贴上代码:

//54.调整数组顺序使奇数位于偶数前面(数组)。
//
//题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
//所有偶数位于数组的后半部分。要求时间复杂度为O(n)。

#include <iostream>

using namespace std;

int partition(int *index,int begin,int end){
	int i = begin;
	int j = end;
	int temp;
	while(i<j){
		while((i<j)&&!(index[j] & 0x1)){
			--j;
		}
		if(i<j){
			temp = index[i];
			index[i] = index[j];
			index[j] = temp;
		}
		while((i<j)&&(index[i] & 0x1)){
			++i;
		}
		if(i<j){
			temp = index[i];
			index[i] = index[j];
			index[j] = temp;
		}
	}
	return i;
}

int main(){
	int index[] = {2,3,5,6,23,4,2,1,5,6};
	int length = sizeof(index)/sizeof(int);
	
	partition(index,0,length-1);
	for(int i = 0 ; i < length ; ++i){
		cout << index[i] << " ";
	}
	cout << endl;
	system("pause");
	return 1;
}

你可能感兴趣的:(100-54)