28/12/2023 - Nippolo ha scritto:
Magari in seguito entro nel merito del codice postato, ma nell'ordinamento di una lista ipotizzo che lo scopo debba essere quello di lavorare sui nodi e non di limitarsi a scambiare i dati. Per me quindi al di là dell'algoritmo c'è proprio un errore concettuale di fondo. Sbaglio?
Sampei ha ragione, dovresti scambiare i nodi e non i valori interi.
Cmq sia i bugs ce li hai sotto il naso.
void BubbleSort(Lista l){
Lista precendete, successivo;
int elementi=lunghezzalista(&l),tmp;
precendete=l;
successivo=l;
successivo=successivo->next;
for(int i=0;i<elementi-2;i++){
for(int j=0;j<elementi-2;j++){
if(precendete->dato > successivo->dato){
tmp=precendete->dato;
precendete->dato=successivo->dato;
successivo->dato=tmp;
}
}
precendete=successivo;
successivo=successivo->next;
}
}
Seguimi a livello logico:
Tu inserisci i valori input provato: 2 5 4 8 5 “per il momento lasicamo stare cosa ti restituisce”.
prendiamo in considerazione i primi due interi 2 e 5
il flusso è:
- entri nella funzione bubblesort
- inizializzi le variabili
- entri nel primo for con indice “i”
- entri nel secondo for con indice “j”
- esegui l'if …. che valore hanno le variabili che confronti ? precendete->dato = 2 e successivo->dato = 5 . 2 Non è maggiore di 5 …. che succede ? … che non entri nell'if
- un altro giro di ciclo for con indice “j”
- ri-esegui l'if e a questo giro, che valori hanno le variabili che confrontari (visto che precedentemente non sei entrato nel' if ) ? …
Non voglio fare il saccente, o il maestrino, ma se hai difficolta' o non riesci a venirne a capo disegna un flow chart (diagramma di flusso)
dal disegno è tutto più chiaro, una volta che il diagramma di flusso è corretto il codice lo scrivi in un nano secondo “senza bugs” .
Ci sono due bugs :
- il primo “te l'ho detto”,
- il secondo è conseguenza del primo