代码题--C++--偶数在前奇数在后牛客网数组操作
题目描述:
输入一个无序整数数组,调整数组中数字的顺序, 所有偶数位于数组的前半部分,使得所有奇数位于数组的后半部分。
要求时间复杂度为O(n)。
解题思路:函数中实现,用高低指针,然后判断,如果低位数%2为0,则low++,前面找到奇数,高位数%2为1,则high--,后面找到偶数,然后交换。
C++具体实现如下:
#include <iostream>
using namespace std;
int arr[1000005];
int *Ou_ji(int *arr,int size)
{
int low = 0;
// int size = sizeof(arr)/sizeof(arr[0]);
int high = size-1;
while(low < high)
{
while(low < high && arr[low] % 2 == 0)
{
low++;
}
while(low < high && arr[high] % 2 == 1)
{
high--;
}
swap(arr[low], arr[high]);
}
return arr;
}
int main()
{
int n=0;
for(;cin>>arr[n];++n){
}
int *brr = Ou_ji(arr,n);
for(int i = 0; i <n; i ++)
{
cout << brr[i] << " ";
}
cout << endl;
return 0;
}