您的位置:首页 > 其它

百度的一道笔试题

2013-08-18 01:05 211 查看
一个数组由正数和负数组成,把所有的负数全部放到正数前面,并且要求负数之间,正数之间的相对位置不变。

首先可以肯定的是基于快排思想的方法是不行的,因为快排的不稳定的,鉴于此我们可以采用冒泡的方式,对每一个数,如果是负数就向左冒泡,如果是正数就向右冒泡

下面给出的是另一个思路

void arraydivsort(int a[],int n)
{
int temp=0;
int k=0;
int flag=0;
for(int i=0;i<n;) {
if(0==flag && a[i]<0)
k=i;
if(k-1>0 && a[k-1]>0) {
if(0==flag)
temp=a[k];
a[k]=a[k-1];
k--;
flag++;
if(a[k-1]<0){
a[k]=temp;
i++;
flag=0;
}
}
else
i++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: