Ho lavorato su alcune domande sugli algoritmi negli ultimi giorni e un problema di ordinamento delle bolle in particolare mi ha dato grattacapi.
for (k=1; k <= A.length - 1; k++) { //Line 1
for (m=1; m <= A.length - k; m++) { //Line 2
if (A[m-1] > A[m]) { //Line 3
Swap (A[m-1], A[m]); //Line 4
}
Ora, dovrei trovare il tempo di esecuzione di questo algoritmo nello scenario peggiore, e so che è O (n ^ 2), ma il problema che sto avendo è scoprire quante volte è ogni linea eseguito.
Ad esempio, la linea 1 richiederà n unità di tempo, mentre la linea 4 dipende dalla complessità della funzione Swap. Tuttavia, la linea 2 d'altra parte prenderà [(n-1) * ? ] unità di tempo (ho provato a scoprire esattamente e ho ottenuto (n-1) * n) e sono calpestato nel trovare come eseguire l'istruzione IF, ma presumo che occorrerà (? - 1 ) volte. Se qualcuno potesse darmi una spiegazione su come farlo, lo apprezzerei molto.