partizionamento in 2 porzioni di un array in base ad un valore di discrimine.
credete ci sia qualche errore?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; }

Rispondi quotando

