~~ Ich glaube nicht, dass ich ~~ vergessen werde
(Ergänzung: 2020/06 11:13: 00) Ich habe Ratschläge von @shiracamus erhalten, daher werde ich sie korrigieren.
Die Blasensortierung ist ein Sortieralgorithmus, der auch als grundlegende Austauschmethode bezeichnet wird. ** Dies ist der Fall, wenn Sie versuchen, ihn ordnungsgemäß zu erstellen **
bubble.py
'''1'''def bubble(T):
'''2''' i = len(T)-1
'''3''' while i:
'''4''' for j in range(i-1):
'''5''' if T[j] > T[i]:
'''6''' T[j],T[i] = T[i],T[j]
'''7''' i -= 1
'''8''' return T
Wow, es ist ein sehr kurzer Algorithmus
Die Seite, die es geschrieben hat, war ein wenig überrascht. Da es so kurz ist, werde ich es mit der Zeilennummer erklären.
range (i)
ist in Ordnung, aber die Schleife wird einmal verschwendet.
--T [i]> T [i] Vergleichen Sie dasselbe mit "false"[Wiki](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83 Wie Sie unter Bezugnahme auf% 88) sehen können, ist es dadurch gekennzeichnet, dass es schwer ist, da es sich um einen Algorithmus handelt, der beim Sortieren eine doppelte Schleife aufweist. Wenn Sie alles einzeln austauschen, ist dies auch eine Ursache für das hohe Gewicht, sodass der Verbesserungsalgorithmus die Daten speichert.
bubble2.py
def bubble2(T):
for i in range(len(T)-1,0,-1):
tmp = T[0]
for j in range(1,i+1):
if tmp < T[j]:
tmp , T[j] = T[j], tmp
T[j-1]=T[j]
T[i] = tmp
print(T)
return T
Ich habe versucht, es sofort zu schaffen, aber gibt es eine Verbesserung? Es sollte sein.
Ich habe ein Programm erstellt, das ein zufälliges Array ohne doppelte Zahlen erstellt, daher werde ich ein Beispiel geben.
(Korrigierter Teil)
Vermeiden Sie die Verwendung von Listen als Standardargumente. Referenz: https://docs.python.org/ja/3/faq/programming.html#why-are-default-values-shared-between-objects
Ich habe den Teil xMake (i, T = [-1]) und den Text des Programms korrigiert.
makeLis.py
import random as r
def xMake(i,T = None ):
if T is None:
T = [r.randint(1,i)]*i
return xMake( 1 , T )
if i == len(T):
return T
T[i] = r.randint(1,len(T))
for j in range(i):
if T[i] == T[j]:
return xMake( i , T )
return xMake( i+1 , T )
print(xMake(10))
>>[2, 1, 3, 6, 4, 10, 9, 5, 7, 8]
print(xMake(20))
>>[13, 20, 1, 12, 7, 8, 6, 4, 17, 11, 14, 9, 18, 3, 5, 10, 15, 2, 19, 16]
~~ Personen, die die Wiederholungsfunktion verwenden, auch wenn sie dazu bereit sind ~~ Bitte sagen Sie mir, ob es eine bessere oder sauberere Schreibweise gibt.
Ich habe von @shiracamus gelernt. Sie können klar schreiben, indem Sie> range und sample verwenden.
By_shiracamus.py
import random as r
def xMake(i):
return r.sample(range(1, i + 1), k=i)
print(xMake(10))
print(xMake(20))
Die Verwendung von random.sample
macht es so viel einfacher ...!
Vielen Dank! Ich werde es als Beispiel verwenden!
Wenn ich eine Funktion deklariere, nenne ich sie oft "x〇〇 ()" (normalerweise eine Zahl). Wenn Sie ein Programm ohne Zweck schreiben oder kopieren und den Schreibstil ändern, machen Sie beim Programmieren einen Fehler, wenn der Funktionsname keine Regel enthält. Wenn Sie es dann tatsächlich verwenden, schreiben Sie es mit der Ersetzungsfunktion des Texteditors neu, um daraus einen Namen zu machen, den Sie verstehen können. Ich weiß nicht, ob das eine gute Sache ist, aber da ich nicht gut Englisch kann, mache ich manchmal peinliche Dinge wie Rechtschreibfehler.
Recommended Posts