一个数组中有三种数,负数,零和正数,现在要求只对数组扫描一遍,即完成将数组分为三部分,负数、零和正数。尝试写了一下代码。


#include <stdio.h>
#define N 9
void swap(int *p,int *q)
{
    int temp;
    temp=*p;
    *p=*q;
    *q=temp;
    return ;
}
int main()
{
    int array[N]={-1,-3,0,-2,3,2,-2,0,1};
    int *p_neg,*p,*p_pos;
    for (p_neg=&array[0],p=&array[0],p_pos=&array[N-1]; p <= p_pos; p++)
    {
        if (*p < 0)
        {
            swap(p,p_neg);
            p_neg++;
        }
        if (*p > 0)
        {
            swap(p,p_pos);
            p_pos--;
            p--;
        }
    }
    ;
}