奇数在左
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组前半部分
要求时间复杂度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;
}