Betrachtet man diesen Pseudocode eines Bubblesorts:
FOR i := 0 TO arraylength(list) STEP 1
switched := false
FOR j := 0 TO arraylength(list)-(i+1) STEP 1
IF list[j] > list[j + 1] THEN
switch(list,j,j+1)
switched := true
ENDIF
NEXT
IF switched = false THEN
break
ENDIF
NEXT
Was wären die Grundideen, die ich berücksichtigen müsste, um die durchschnittliche Zeitkomplexität zu bewerten? Ich habe es bereits geschafft, die schlechtesten und besten Fälle zu berechnen, aber ich bin nicht sicher, wie ich die durchschnittliche Komplexität der inneren Schleife bewerten soll, um die Gleichung zu bilden.
Die Worst-Case-Gleichung lautet:
wobei das innere Sigma die innere Schleife darstellt und das äußere Sigma die äußere Schleife darstellt. Ich denke, dass ich beide Sigmas aufgrund der "if-then-break" -Klausel ändern muss, die das äußere Sigma beeinflussen könnte, aber auch aufgrund der if-Klausel in der inneren Schleife, die die während einer Schleife ausgeführten Aktionen beeinflusst (4 Aktionen + 1 Vergleich, wenn wahr, sonst nur 1 Vergleich).
Zur Verdeutlichung des Begriffs Durchschnittszeit: Dieser Sortieralgorithmus benötigt unterschiedliche Zeit für verschiedene Listen (gleicher Länge), da der Algorithmus möglicherweise mehr oder weniger Schritte durch / innerhalb der Schleifen benötigt, bis die Liste vollständig in Ordnung ist. Ich versuche einen mathematischen (nicht statistischen) Weg zu finden, um den Durchschnitt der benötigten Runden zu bewerten.
Dafür erwarte ich, dass jede Bestellung die gleiche Möglichkeit hat.