Biorąc pod uwagę ten pseudo-kod portu bąbelkowego:
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
Jakie podstawowe idee musiałbym pamiętać, aby ocenić średnią złożoność czasu? Obliczenia najgorszych i najlepszych przypadków zakończyłem już, ale utknąłem rozważając, jak ocenić średnią złożoność wewnętrznej pętli, aby utworzyć równanie.
Najgorsze równanie to:
w którym wewnętrzna sigma reprezentuje wewnętrzną pętlę, a zewnętrzna sigma reprezentuje zewnętrzną pętlę. Myślę, że muszę zmienić oba sigmy ze względu na klauzulę „jeśli-to-zepsuć”, która może wpływać na sigmę zewnętrzną, ale także z powodu klauzuli if w pętli wewnętrznej, która wpłynie na działania wykonywane podczas pętli (4 akcje + 1 porównanie, jeśli to prawda, w przeciwnym razie tylko 1 porównanie).
W celu wyjaśnienia terminu średni czas: ten algorytm sortowania będzie wymagał innego czasu na różnych listach (o tej samej długości), ponieważ algorytm może wymagać więcej lub mniej kroków przez pętle / w pętli, dopóki lista nie będzie całkowicie uporządkowana. Staram się znaleźć matematyczny (niestatystyczny sposób) szacowanie średniej potrzebnych rund.
W tym celu oczekuję, że każde zamówienie będzie miało taką samą możliwość.