devo fare un algoritmo che dato un array di interi lungo n e 2 interi x e y mi ritorni un array che ha come primi elementi solo elementi <x e come ultimi elementi solo elementi >y in mezzo quelli compresi tra x e y estremi inclusi.

io ho ideato un algoritmo che mi pare corretto, ma vorrei conferme...
codice:
void scambia(int *a,int i, int j){
     int t;
     t=a[i];
     a[i]=a[j];
     a[j]=t;
}//end scambia

void tripartizione(int *a,int x, int y,int n){
int i,j,k;
i=j=0;
k=n-1;

while(j<=k){
    if(j<i)
        j=i;  
    else     
        if(a[j]<x){
            scambia(a,i,j);
            i++;
        }else
            if(a[j]>y){
                scambia(a,k,j);
                k--;           
            }else
                j++;               
}//end while

}//end tripartisci
grazie per eventuali consigli o suggerimenti.