~~ Je ne pense pas que j'oublierai ~~
(Ajout: 2020/06 11:13: 00) J'ai reçu des conseils de @shiracamus, je vais donc le corriger.
Le tri à bulles est un algorithme de tri également appelé méthode d'échange de base, et ** ce sera le cas si vous essayez de le faire correctement **
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, c'est un algorithme très court
Le côté qui l'a écrit était un peu surpris. Comme c'est si court, je vais l'expliquer avec le numéro de ligne.
len (T)
est "length", donc si vous l'insérez tel qu'il est dans le numéro du tableau, une erreur se produira qui se réfère à l'extérieur du tableau.while
ne doit contenir que des caractères qui sont true
, tout comme ʻif, donc j'ai ajouté ʻi
seul, qui a la même signification que ʻi! = 0. --Si vous voulez vraiment utiliser
for, supprimez la première ligne et écrivez
for i in range (len (T) -1,0, -1):`.range (i)
est bien, mais la boucle est gaspillée une fois.
--T [i]> T [i] Compare la même chose avec false
[Wiki](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83 Comme vous pouvez le voir en vous référant à% 88), il se caractérise par sa lourdeur car c'est un algorithme qui a une double boucle lors du tri. En outre, tout permuter un par un est également une cause de poids élevé, l'algorithme d'amélioration enregistrera donc les données.
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
J'ai essayé de le faire sur place, mais y a-t-il une amélioration? Ça devrait être.
J'ai créé un programme qui crée un tableau aléatoire sans numéros en double, je vais donc donner un exemple.
(Partie corrigée)
Évitez d'utiliser des listes comme arguments par défaut. Référence: https://docs.python.org/ja/3/faq/programming.html#why-are-default-values-shared-between-objects
J'ai corrigé la partie qui était xMake (i, T = [-1]) et le texte du programme.
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]
~~ Les personnes qui utilisent la fonction de récurrence même si elles le souhaitent ~~ Veuillez me dire s'il existe une meilleure façon d'écrire ou plus propre.
J'ai appris de @shiracamus. Vous pouvez écrire clairement en utilisant> plage et échantillon.
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))
L'utilisation de random.sample
rend les choses tellement plus faciles ...!
Je vous remercie! Je vais l'utiliser comme exemple!
Lors de la déclaration d'une fonction, je la nomme souvent «x〇〇 ()» (généralement un nombre). Si vous écrivez ou copiez un programme sans but et changez le style d'écriture, vous ferez une erreur lors de la programmation s'il n'y a aucune règle dans le nom de la fonction. Ensuite, lorsque vous l'utilisez réellement, réécrivez-le avec la fonction de remplacement de l'éditeur de texte pour en faire un nom compréhensible. Je ne sais pas si c'est une bonne chose, mais comme je ne suis pas bon en anglais, je fais parfois des choses embarrassantes comme des fautes d'orthographe.
Recommended Posts