您的位置:首页 > 其它

给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题

2013-05-26 20:55 806 查看
题目:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
要求:空间复杂度O(1),时间复杂度为O(n)。

  我自己写了一下(之前写的那个不对,现在重写了,时间复杂度达到O(n)



voidswap(int*a,inti,intj)
{
inttmp;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}

voidAdustArray(int*a,intn)
{
inti=0,j=n-1;
while(i<j)
{
if(a[i]%2==0&&a[j]%2!=0)//左偶右奇,直接交换,进入下一次循环
{
swap(a,i,j);
i++;
j--;
}
elseif(a[i]%2==0&&a[j]%2==0)//左右都是偶数,右边数不交换,而是j--,判断前一个数
j--;

elseif(a[i]%2!=0&&a[j]%2!=0)//左右都是奇数,左边数不加换,i++,判断下一个数
i++;
else
{
i++;
j++;
}
}
}


以下是测试代码

voidmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,0};
AdustArray(a,10);
for(inti=0;i<10;i++)
cout<<a[i]<<'';
cout<<endl;
}
测试1:(第一个数为奇数)




测试2:(第一个数为偶数)



注:因为题目未要求排序,所以结果看起来可能比较别扭
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐