[GO] Les débutants en Python organisent des sortes de bulles

Ceci est un mémorandum

~~ 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.

Qu'est-ce que le tri à bulles

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 **

bable.png

Explication du contenu

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.

  1. Déclaration de fonction, l'argument est T créé avec un type de tableau numérique.
  2. ** Attention ** Le nombre renvoyé par 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.
  3. L'instruction 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):`.
  4. Voici «pour». range (i) est bien, mais la boucle est gaspillée une fois. --T [i]> T [i] Compare la même chose avec false
  5. Je veux que le côté droit du tableau soit grand, donc si le côté gauche est grand, échangez-le.
  6. Swap. ~~ Une ligne suffit pour Sabori Makan ~~ C'est beau parce qu'il est assemblé en une seule ligne.
  7. Dans le tri à bulles, le résultat est fixé de l'arrière, donc -1. Ce que je n'aime pas le plus avec Python, c'est que je ne peux pas le faire.
  8. Renvoie T. S'il y a une boucle à l'intérieur et qu'il y a un formulaire à retourner, c'est une personne étrange qui veut en faire une fonction de récurrence, donc vous pourrez jouer avec plus tard.

Le tri à bulles est en fait lourd

[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.

De côté

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

Les débutants en Python organisent des sortes de bulles
Les débutants en Python organisent des tris de tas
Les débutants en Python organisent des tri rapides
Les débutants en Python défient Cpaw CTF Q14 avec le tri à bulles
[Python] Trier
Python #sort
Tri à bulles
Tri à bulles
Mise en œuvre du tri Stuge dans Python 3 (tri à bulles et tri rapide)
Les débutants pratiquent Python
Note du débutant Python
Guide du débutant Python (fonctions)
Tri par classe Python
Python débutant touche Pytorch (3)
Tri à bulles sans utiliser le tri
[Mémo] Tri de liste Python3
Guide du débutant du dictionnaire Python
Feuille de triche de tri Python
Tri personnalisé en Python3
[Python] Trier les types de collection
Python débutant touche Pytorch (1)
Python débutant touche Pytorch (2)
Guide du débutant Python (Introduction)
OpenCV pour les débutants en Python
Organiser les types en Python
Tri par bulles, tri par sélection, tri par insertion, tri par shell, tri par fusion, tri rapide, tri par comptage (Python)
Programmation des débutants comparés aux temps de tri
Trier les importations de modules Python par ordre alphabétique
Flux d'apprentissage pour les débutants en Python
Ordre de tri des dict de base Python
fonction de mémorandum python pour débutant
Implémentation de l'algorithme de "Algorithm Picture Book" en Python3 (Bubble Sort)
Tri décroissant avec mongodb en python
Construction de l'environnement Python3 (pour les débutants)
Organiser l'environnement de développement Python
3 raisons pour lesquelles les débutants en programmation devraient commencer avec Python
Python #function 2 pour les super débutants
Guide du débutant Python (Variations / Tableaux)
Grammaire de base Python pour les débutants
Pandas 100 coups pour les débutants en Python
Python #function 1 pour les super débutants
#List Python pour les super débutants
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Tri à bulles avec animation moelleuse
Trier par date en python
À propos de Python sort () et reverse ()
[Python] Traitement aléatoire (créer, sélectionner, trier)
[Python] Tri itérable selon plusieurs conditions
Exercices Python pour les débutants # 2 [pour instruction / instruction while]
Python pour les super débutants Super débutants Python # dictionnaire type 1
Résumé de l'apprentissage automatique par les débutants de Python
Python #index pour les super débutants, tranches
Mémo d'automatisation de saisie par Python débutant
Trier les gros fichiers texte en Python
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Fonction Python #len pour les super débutants
Mise en œuvre du tri à bulles en Java (BubbleSort)
[Python] Tri Starlin à une ligne avec 50 caractères
Web scraping pour les débutants en Python (1)
# 2 Les débutants en Python défient AtCoder! ABC085C --Otoshidama
Exécutez unittest en Python (pour les débutants)