[GO] Les débutants en Python organisent des tri rapides

Ceci est un mémorandum

J'oublierai vraiment

Site de devis

Cette fois, je voudrais vous présenter les sites que j'ai visités pour les organiser plus tôt.

Les algorithmes eux-mêmes sont légèrement différents pour chacun, mais comme ils sont du même tri rapide, nous les organiserons en fonction de l'algorithme de @ muijp.

programme

[Tri rapide de @ Muijp](https://qiita.com/muijp/items/257e8b9b49d891137d56#%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3% 82% BD% E3% 83% BC% E3% 83% 88-quick-sort) a un programme de tableau aléatoire et une sortie pour le débogage qui a été conseillé par @shiracamus l'autre jour.

q_sort.py


def qSort(a):
    print(a)#Pour le débogage
    if len(a) in (0, 1):
        return a

    p = a[-1]
    l = [x for x in a[:-1] if x <= p]
    r = [x for x in a[:-1] if x >  p]

    return qSort(l) + [p] + qSort(r)
a = r.sample(range(1,11),k=9)
qSort(a)
#production_____________________
[3, 7, 1, 6, 9, 8, 2, 10, 4]
[3, 1, 2]
[1]
[3]
[7, 6, 9, 8, 10]
[7, 6, 9, 8]
[7, 6]
[]
[7]
[9]
[]
>>[1, 2, 3, 4, 6, 7, 8, 9, 10]

Ouais, le programme est trop concis pour être compris.

Démonter et réfléchir

La première chose à remarquer return qSort(l) + [p] + qSort(r) Je pense que. C'est la partie où les petits nombres (arrangement) et les grands nombres (arrangement) sont placés à droite et à gauche du "pivot (cellule d'intérêt)" qui est une caractéristique de tri rapide.

Référence de trace Si vous regardez le gif sur ce site

  1. Prenez le pivot du milieu
  2. Permutez le petit nombre à gauche et le grand nombre à droite dans l'ordre de l'extérieur
  3. Changez la plage de balayage du minimum au pivot et amenez le pivot au centre Vous pouvez voir que cela se répète.

Cependant, dans ce programme p = a[-1] Comme, en prenant le pivot jusqu'au dernier numéro Et l = [x for x in a[:-1] if x <= p] r = [x for x in a[:-1] if x > p] Donc, je l'ai divisé en un nombre plus grand que le pivot et un nombre plus petit que le pivot, et les ai joints avec return (appelant la fonction de récurrence).

la première if len(a) in (0, 1): return a Renvoie si le nombre de caractères est égal ou inférieur à un, il est renvoyé comme valeur de retour de la fonction récursive.

Retracer

Sur la base de ce qui précède, essayez de tracer avec le nombre aléatoire ci-dessus

#production_____________________
[3, 7, 1, 6, 9, 8, 2, 10, 4]
[3, 1, 2]
[1]
[3]
[7, 6, 9, 8, 10]
[7, 6, 9, 8]
[7, 6]
[]
[7]
[9]
[]
>>[1, 2, 3, 4, 6, 7, 8, 9, 10]

Séquence [3, 7, 1, 6, 9, 8, 2, 10, 4] Pivot p = 4 Petit tableau l = {3,1,2} Grand tableau r = {7,6,9,8,10} Et démonter image.png

Relancez la petite séquence, p=2 l={1}、r={3} Et démontage image.png Chacun a été démonté, alors confirmez

Si vous redémarrez la grande séquence, cette fois p est le maximum à 10, donc l={7,6,9,8} 、r={} Est démonté image.png Puis subdivisez tous les nombres image.png Renvoyé sous forme de données combinées image.png Il est.

à la fin

Cette fois, c'était presque rond, mais j'ai réalisé à quel point je ne le comprenais pas. C'était vraiment agréable d'avoir une telle opportunité.

Recommended Posts

Les débutants en Python organisent des tri rapides
Les débutants en Python organisent des tris de tas
Les débutants en Python organisent des sortes de bulles
tri rapide en python
Les débutants pratiquent Python
Note du débutant Python
Guide du débutant Python (fonctions)
Python débutant touche Pytorch (3)
Manuel python pour les débutants
Guide du débutant du dictionnaire Python
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 rapide d'un tableau en Python 3
Flux d'apprentissage pour les débutants en Python
fonction de mémorandum python pour débutant
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
Implémentation du tri rapide en Python
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Python
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
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Tri rapide
Fonction Python #len pour les super débutants
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)
Mémorandum du débutant Mouvement "isdigit" Python
Web scraping pour les débutants en Python (4) -1
Python #Hello World pour les super débutants
Python pour les super débutants Super débutants Python # dictionnaire type 2
les débutants en python ont essayé de le découvrir
Apprenez les bases de Python ① Débutants élémentaires
INSÉRER dans MySQL avec Python [Pour les débutants]
[Python] Compte-rendu de la réunion d'étude pour les débutants (7/15)
Réponse à la sélection des débutants d'AtCoder par Python3
[Épisode 2] Les débutants ont essayé Numeron AI avec python
[Épisode 3] Les débutants ont essayé Numeron AI avec python
Mémorandum des débutants en python
Mettons ensemble Python pour les super débutants
[Épisode 0] Un débutant a essayé Numeron AI avec python
[Épisode 1] Un débutant a essayé Numeron AI avec python
10 erreurs Python communes aux débutants
[Python] Lire des images avec OpenCV (pour les débutants)
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Organisez les données séparées par dossier avec Python
Création WebApi avec Python (création CRUD) Pour les débutants