Bubble sort

di il
4 risposte

Bubble sort

Salve, ho questa funzione che alcune volte stampa correttamente tutti i numeri in ordine crescente e altre volte trasla i voti di una posizione lasciando vuota la prima posizione. Cosa può esserci di sbagliato? Grazie.
void OrdinamentoCrescenteVotiInElenco(Studente *c_ElencoStudenti, int dim){ //bubble sort
	Studente temp;
	int crescente = 0;
	int i;

	while(crescente < dim){
		i = 0;
		crescente = 0;
		while(i < dim){
			if ((c_ElencoStudenti + i)->voto > (c_ElencoStudenti + (i + 1))->voto){
				temp = *(c_ElencoStudenti + i);
				*(c_ElencoStudenti + i) = *(c_ElencoStudenti + (i + 1));
				*(c_ElencoStudenti + (i + 1)) = temp;
			}else crescente ++;
			i++;
		}
	}
    //STAMPA (VA SPOSTATO IN UN' ALTRA FUNZIONE)
	int j = 0;
	while(j<dim){
		printf("Voto: %d\n",(c_ElencoStudenti + j)->voto);
		j++;
	}
	printf("FINE\n");
	return;

}
Stampa corretta:
Voto: 20
Voto: 24
Voto: 25
Voto: 27
Voto: 28
Voto: 29
FINE
Stampa Errata:

Voto: -1522618538
Voto: 20
Voto: 24
Voto: 25
Voto: 27
Voto: 28
FINE

4 Risposte

  • Re: Bubble sort

    Un suggerimento per trovare il problema... metti una printf prima di confrontare i valori e visualizza i e i+1 per capire cosa confronta il tuo algoritmo
  • Re: Bubble sort

    Prova a pensare cosa succede quando hai una lista di un solo elemento: i due while li passi e procedi a valutare un if che non ha senso...
  • Re: Bubble sort

    Ho risolto in questo modo:
    void OrdinamentoCrescenteVotiInElenco(Studente *c_ElencoStudenti, int dim){ //bubble sort
    Studente temp;
    	int crescente = 0;
    	int i;
    
    	while(crescente < (dim - 1)){
    		i = 0;
    		crescente = 0;
    		while(i < (dim - 1)){
    			if ((c_ElencoStudenti + i)->voto > (c_ElencoStudenti + (i + 1))->voto){
    				temp = *(c_ElencoStudenti + i);
    				*(c_ElencoStudenti + i) = *(c_ElencoStudenti + (i + 1));
    				*(c_ElencoStudenti + (i + 1)) = temp;
    			}else crescente ++;
    			i++;
    		}
    	}
        //STAMPA (VA SPOSTATO IN UN' ALTRA FUNZIONE)
    	int j = 0;
    	while(j<dim){
    		printf("Voto: %d\n",(c_ElencoStudenti + j)->voto);
    		j++;
    	}
    	printf("FINE\n");
    	return;
    
    }
    Perchè l' if non ha senso?
  • Re: Bubble sort

    Ora ha senso
Devi accedere o registrarti per scrivere nel forum
4 risposte