百度笔试题
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
要求:空间复杂度O(1),时间复杂度为O(n)。
注:题目来源,v_July_v http://blog.csdn.net/v_july_v/article/details/6234496
思路:我的想法是从两边遍历,从左边遍历的如果是奇数就继续留着,从右边遍历的如果是偶数就继续留在右边,如果是奇数就和从左边遍历遇到的第一个偶数交换,我一下就有了思路,可能是因为昨天才做了双向冒泡排序。
代码可能还有些问题,时间复杂度肯定是符合的,空间复杂度不太懂。定义了较多中间变量,不知道符合不。还希望有懂的道友帮忙解答。
#include<stdio.h>
#define LENGTH 10
int main()
{
int arr[LENGTH]={2,1,4,6,7,3,5,9,0,11};
int temp;
int i=0;
int j=LENGTH-1;
while(i<j)
{
while(arr[i]%2==1)i++;
while(arr[j]%2==0)j--;
if(i<j)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
i++;
j--;
}
for(i=0;i<LENGTH;i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}