web-dev-qa-db-fra.com

À propos de la méthode intégrée de sort () de Python

Quel algorithme la méthode sort() intégrée dans Python utilise-t-elle? Est-il possible de consulter le code de cette méthode?

88
Johannes

Sûr! Le code est ici , en commençant par la fonction islt et en continuant un peu QUIT ;-). Comme le commentaire de Chris le suggère, c'est du code C. Vous voudrez également lire ce fichier texte pour une explication textuelle, les résultats, etc. etc.

Si vous préférez lire Java code que le code C, vous pouvez regarder l'implémentation de Joshua Bloch de timsort dans et pour Java (Joshua est aussi le gars qui a implémenté, dans 1997, le mergesort modifié qui est encore utilisé en Java, et on peut espérer que Java finira par passer à son dernier port de timsort).

Une explication du Java port de timsort est ici , le diff est ici (avec des pointeurs vers tous les fichiers nécessaires), le fichier clé est ici - FWIW, alors que je suis un meilleur programmeur C que Java programmeur, dans ce cas, je trouve Joshua Java code plus lisible dans l'ensemble que le code C de Tim ;-).

99
Alex Martelli

Je voulais juste fournir un lien très utile que j'ai manqué dans la réponse par ailleurs complète d'Alex: ne explication de haut niveau du tri temporel de Python (avec des visualisations graphiques!).

(Oui, l'algorithme est essentiellement connu sous le nom de Timsort maintenant)

27
u0b34a0f6ae

Dans les premières versions de python, la fonction de tri implémentait une version modifiée de quicksort. Cependant, il a été jugé instable et à partir de 2.3, ils sont passés à l'aide d'un algorithme de fusion adaptatif.

7
Silfverstrom