分治1---奇数在左

奇数在左


	输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组前半部分
	要求时间复杂度O(n) 
思路1:
开一个n大小的数组,扫描一次双指针

思路2:
不开辟新空间,利用快排的思想,找到左面第一个偶数和右面第一个奇数交换 

#include<iostream>
using namespace std;


void f(int arr[], int left, int right){
	int i = left;
	int j = right;
	while(i <= j){
		while(i <= j && arr[i] % 2) i++;
		while(i <= j && arr[j] % 2 == 0) j--;
		if(i < j){
			swap(arr[i], arr[j]);
		}
	}
}

int main() {
	int arr[] = {2,5,4,3,7,8,1,9};
	f(arr, 0, 7);
	for(int i = 0; i <= 7; i++)
		cout<<arr[i]<<' ';
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44227389/article/details/107844085