Je voulais apprendre des algorithmes tels que le tri des bulles, alors j'ai essayé de trier une colonne FizzBuzz aléatoire comme point de départ.
J'ai défini une fonction fzbz () qui change une valeur numérique en FizzBuzz le cas échéant, et make_random_fizzbuzz () qui la change dans un ordre aléatoire.
def fzbz(n):
if (n%15) == 0:
return "FizzBuzz"
elif (n%5) == 0:
return "Buzz"
elif (n%3) == 0:
return "Fizz"
else:
return n
import random
def make_random_fizzbuzz(start=1,finish=100):
seq = range(start,finish+1)
random_fizzbuzz = []
while seq:
random_fizzbuzz.append(fzbz(seq.pop(random.randint(0,len(seq)-1))))
return random_fizzbuzz
Plus précisément, la solution à cet article est de trier la liste comme celle ci-dessous dans un style FizzBuzz. (Liste créée par la fonction ci-dessus)
Le tri à bulles est un algorithme d'alignement qui compare les valeurs de l'élément de base et d'autres éléments de la liste et les échange en fonction des conditions.
La condition est la relation d'amplitude de la valeur. Triez la liste par ordre décroissant de valeur ou par ordre décroissant de valeur.
Ce tri est appelé un tri à bulles car il semble que des éléments avec des valeurs supérieures ou inférieures émergent lorsque vous effectuez ce tri.
Analyse d'algorithme Étapes pour organiser la liste par ordre croissant.
Extraire un élément de l'élément de base de liste «A» Comparez les valeurs de l'élément 'A' et de l'élément suivant 'B' Échangez les valeurs de l'élément "A" et de l'élément "B" si l'élément "A" est supérieur à l'élément "B" Comparer / échanger avec chaque élément comme élément 'A' et élément 'C', élément 'A' et élément 'D' jusqu'à la fin de la liste L'élément avec la valeur la plus élevée ou l'élément avec la valeur la plus basse dans la liste émerge au point de base. Passez à l'élément de base (élément 'B') et répétez les étapes 2 à 6 jusqu'à la fin de la liste L'alignement est terminé en effectuant une comparaison à tour de rôle comme décrit ci-dessus et en exécutant un échange qui correspond aux conditions. http://www.codereading.com/algo_and_ds/algo/bubble_sort.html
J'ai écrit une sorte de bulle en python qui peut être légèrement différente de ce qui précède, mais probablement de la même nature.
Tout d'abord, une fonction qui génère une séquence aléatoire de nombres.
import random
def make_randoms(start=1,finish=100):
seq = range(start,finish+1)
randoms = []
while seq:
randoms.append(seq.pop(random.randint(0,len(seq)-1)))
return randoms
Une fonction qui trie la séquence de nombres créée par la fonction ci-dessus, et dont la signification n'est pas bien comprise.
def bubble_sort(target):
limit = len(target)-1
while limit > 0:
i = 0
while i<limit:
if target[i]>target[i+1]:
target[i], target[i+1] = target[i+1], target[i]
i += 1
limit -= 1
return target
Il semble que le problème avec les colonnes FizzBuzz aléatoires soit la relation de taille.
if target[i]>target[i+1]:
En d'autres termes, il semble que nous devrions faire quelque chose à propos de cette zone où la taille est jugée.
Par conséquent, le code qui définit les compteurs f, b, fb pour la numérisation des chaînes de caractères Fizz, Buzz, FizzBuzz et
(f,b,fb) = (3,5,15)
Une fonction qui numérise Fizz, Buzz, FizzBuzz en fonction du compteur,
def zbzf(n,f,b,fb):
n = str(n)
if n == 'FizzBuzz':
return fb
elif n == 'Buzz':
return b
elif n == "Fizz":
return f
else:
return int(n)
Fizz, Buzz, une fonction qui met à jour le compteur lorsque FizzBuzz apparaît
def next_count(n,f,b,fb):
if n == 'FizzBuzz':
fb += 15
elif n == 'Buzz':
if (b%15) == 10:
b += 10
else:
b += 5
elif n == "Fizz":
if (f%15) == 12:
f += 6
else:
f += 3
return f, b, fb
J'ai créé et essayé de comparer chaque élément et de mettre à jour le compteur en les utilisant.
(f,b,fb) = (3,5,15)
while i<limit:
if zbzf(target[i],f,b,fb)>zbzf(target[i+1],f,b,fb):
target[i], target[i+1] = target[i+1], target[i]
f,b,fb = next_count(target[i],f,b,fb)
import random
def fzbz(n):
if (n%15) == 0:
return "FizzBuzz"
elif (n%5) == 0:
return "Buzz"
elif (n%3) == 0:
return "Fizz"
else:
return n
def zbzf(n,f,b,fb):
n = str(n)
if n == 'FizzBuzz':
return fb
elif n == 'Buzz':
return b
elif n == "Fizz":
return f
else:
return int(n)
def make_random_fizzbuzz(start=1,finish=100):
seq = range(start,finish+1)
random_fizzbuzz = []
while seq:
random_fizzbuzz.append(fzbz(seq.pop(random.randint(0,len(seq)-1))))
return random_fizzbuzz
def next_count(n,f,b,fb):
if n == 'FizzBuzz':
fb += 15
elif n == 'Buzz':
if (b%15) == 10:
b += 10
else:
b += 5
elif n == "Fizz":
if (f%15) == 12:
f += 6
else:
f += 3
return f, b, fb
def fizzbuzz_sort(target):
limit = len(target)-1
while limit > 0:
i = 0
(f,b,fb) = (3,5,15)
while i<limit:
if zbzf(target[i],f,b,fb)>zbzf(target[i+1],f,b,fb):
target[i], target[i+1] = target[i+1], target[i]
f,b,fb = next_count(target[i],f,b,fb)
i += 1
limit -= 1
return target
print fizzbuzz_sort(make_random_fizzbuzz())
Le FizzBuzz aléatoire a été trié! !!
Recommended Posts