一个数组由正数和负数组成,把所有的负数全部放到正数前面,并且要求负数之间,正数之间的相对位置不变。
首先可以肯定的是基于快排思想的方法是不行的,因为快排的不稳定的,鉴于此我们可以采用冒泡的方式,对每一个数,如果是负数就向左冒泡,如果是正数就向右冒泡
下面给出的是另一个思路
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++;
}
}