Sie müssen die Big-Oh-Notation verstehen, um zu verstehen, wie effizient Ihr Algorithmus in Bezug auf die Verwendung von Computerressourcen unabhängig von Computerarchitektur oder Taktrate ist. Es hilft Ihnen im Grunde, die Worst-Case-Laufzeit oder die Speichernutzung Ihres Algorithmus zu analysieren, wenn die Größe der Eingabe zunimmt. Zusammenfassend wird die Laufzeit Ihres Algorithmus in eine dieser Kategorien fallen (vom schnellsten zum langsamsten);
O (1): Konstante Zeit. Ausgeprägt (Oh von 1). Die schnellste Zeit.
O (lg n): Logarithmische Zeit. Ausgeprägt (Oh, log n). Schneller als lineare Zeit. Traditionell ist es die schnellste Zeit für die Suche.
O (n): lineare Zeit. Ausgedrückt (Oh von n, n ist die Größe Ihres Eingangs, z. B. Größe von ein Array). Normalerweise etwas, wenn Sie jedes einzelne Bit von Ihre Eingabe untersuchen müssen.
O (nlgn): Die schnellste Zeit, die wir derzeit erreichen können, wenn eine Sortierung auf einer Liste von Elementen durchgeführt wird.
O (n ** 2): Oh n Quadrat. Quadratische Zeit. Oft ist dies die Grenze, wenn wir verschachtelte Schleifen haben.
O (2 ** n): Wirklich, wirklich groß! Eine Zahl, die auf n erhöht wird, ist langsamer als .
In Ihrem Fall verwenden Sie verschachtelte Schleifen, die O (n 2) ist. Der Code, den ich geschrieben habe, verwendet eine einzelne while-Schleife und hat eine Wachstumskomplexität von O (n), die schneller ist als O (n 2). Ich habe es nicht wirklich auf einer sehr großen array
versucht, aber in Ihrem Fall scheint es zu funktionieren. Probieren Sie es aus und lassen Sie mich wissen, ob es wie erwartet funktioniert.
k = [7, 0, 3, 4, -1]
n = len(k)
i = 0
count = 0
while count < n**2: # assuming we wouldn't go through the loop more than n squared times
if i == n - 1:
i = 0
count += 1
swapped = False
elif k[i] > k[i+1]:
temp = k[i]
k[i] = k[i+1]
k[i+1] = temp
i+=1
swapped = True
elif swapped == False:
i += 1
elif swapped == True and i < n - 1:
i += 1
Hinweis: In der Beispielliste (k), brauchen wir nur in einer Schleife durch die Liste dreimal, um sie in aufsteigender Reihenfolge sortiert werden. Wenn Sie also die while-Schleife zu dieser Codezeile while count < 4:
ändern, würde es immer noch funktionieren.
Es gibt schnellere Sortieralgorithmen als O (n ** 2). Müssen Sie Blasensortieren verwenden? –
Ja, es ist erforderlich. – Peyton
Blasensortierung ist ein Beispiel für einen schlechten Sortieralgorithmus. Das einzige, was Sie tun können, ist, früh aus der Schleife zu entkommen, die ein wenig schneller sein wird ... – user1767754