给定一个存放整数的数组,如何重新排列数组使得数组左边为奇数,右边为偶数?要求:空间复杂度为O(1),时间复杂度为O(n);
代码
#include <iostream>
using namespace std;
void Swap(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
void ReverseArray(int arr[],int len)
{
int begin = 0;
int end = len -1;
while(begin<end)
{
while(arr[begin]%2 == 1&&end>begin)
{
++begin;
}
while(arr[begin]%2 ==0&&end>begin)
{
--end;
}
Swap(arr[begin],arr[end]);
}
}
int main(){
int array[] = {1,23,2,34,21,45,26,22,41,66,74,91,17,64};
int len = sizeof(arr)/sizeof(arr[0]);
int i;
ReverseArray(array,len);
for(i = 0;i<len;i++){
printf("%d",array[i]);
}
printf("\n");
return 0;
}