Trova il primo negativo da sinistra.
Trova il primo positivo da destra.
Scambiali.
Ricomincia.
Continua fino a che i due puntatori "si incontrano".

In Java e senza puntatori:

codice:
    public static void positiviNegativi(int v[],int dim){
        int p1 = 0;
        // In Java non serve passare dim, ma l'ho fatto per chiarezza
        int p2 = dim-1;
        int app=0;
        while (p1!=p2) {
            while ( (v[p1]>=0) && (p1!=p2))
                p1++;
            while ( (v[p2]<=0) && (p1!=p2))
                p2--;
            app = v[p1];
            v[p1] = v[p2];
            v[p2] = app;
        }
    }
La condizione p1!=p2 e' la condizione di uscita dal ciclo, e va testata anche nei sottocicli. Appena p1==p2 bisogna interrompere.