partizionamento in 2 porzioni di un array in base ad un valore di discrimine.

codice:
#include <cstdlib>
#include <iostream>

using namespace std;

void partizione_array(int *A, int m, int *p, int y){
	/*i indica il massimo indice per i valori <= y; j il minimo indice per i 
	valori > di y; app rappresenta la variabile temporanea utilizzata per gli scambi*/
	int i, j, app;

	/*Assegno i valori iniziali ad i e j in modo che la lettura dei valori <= y
	parte dall'inizio dell'array; mentre quella dei valori > di y parte dalla fine*/
	i=0;
	j=m-1;

	//Verifico la partizione dell'array
	while(i<j){
		/*Partendo dall'i-esimo valore incremento i fino a quando A[i]>y oppure 
		quando i>j*/
		while((A[i]<=y) && (i<j)) 
			i=i+1;
		/*Partendo dal j-esimo valore decremento j fino a quando A[j]<=y oppure 
		quando i>j*/
		while((A[j]>y) && (i<j))
			j=j-1;
		/*Se all'uscita del ciclo risulta che il j-esimo valore dell'array sia 
		maggiore di y, decremento j per uscire dal ciclo*/
		if(A[j]>y) 
			j=j-1;
		/*Se i<j eseguo lo scambio tra l'i-esimo valore e il j-esimo valore e 
		incremento il valore di i e decremento quello di j; in caso contrario
		l'array è stato partizionato e non devo eseguire nessuno scambio*/
		if(i<j){
			app=A[i];
			A[i]=A[j];
			A[j]=app;
			i=i+1;
			j=j-1;
		}
	}

	*p=j; //Assegno l'indice di partizionamento


	return;
}


int main(){
    /*A[80]: array; m: dimensione dell'array; p: indice di partizione;
	y: valore di partizione*/
	int A[80], m, p, y, i;

	//Legge la dimensione dell'array
	cout<<"Gli elementi da inserire sono: ";
	cin>>m;
	cout<<endl;

	//Legge i dati dell'array
	for(i=0;i<m;i++){
		cout<<"Inserire l'elemento numero "<<i<<" : ";
		cin>>A[i];
	}
	cout<<endl;

	//Legge il valore di partizione
	cout<<"Il valore di partizione y e': ";
	cin>>y;
	cout<<endl;

	partizione_array(A, m, &p, y); //chiamata della procedura

	//Stampa l'indice di partizione
	cout<<"L'indice di partizione e': "<<p<<endl;

	//Stampa l'array partizionato
	cout<<"L'array partizionato e': "<<endl;
	for(i=0;i<m;i++)
		cout<<A[i]<<endl;


    system("PAUSE");
    return EXIT_SUCCESS;
}
credete ci sia qualche errore?