Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] partizionamento

  1. #1

    partizionamento

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    I tag CODE !
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da oregon
    I tag CODE !
    Infatti. Li ho aggiunti io.
    Quando si posta del codice, si devono obbligatoriamente utilizzare i tag CODE, per mantenere formattazione ed indentazione.

    Come si usano?
    Si scrive

    [CODE]
    poi si incolla tutto il codice.
    E, alla fine del codice, si scrive
    [/CODE]


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: partizionamento

    Originariamente inviato da sweetilary
    credete ci sia qualche errore?


    L'hai compilato ed eseguito?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5

    Moderazione

    Tra l'altro manca anche il linguaggio di riferimento (non è specificato né nel titolo né nel post); questa volta sistemo io (come nell'altra discussione).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.