Le moyen le plus rapide de trier en Python
Quel est le moyen le plus rapide pour trier un tableau de nombres entiers plus grands que 0 et moins de 100000 en Python? Mais de ne pas utiliser les fonctions intégrées comme le tri.
Je cherche à la possibilité de combiner les 2 sport fonctions selon la taille de l'image.
source d'informationauteur Anders
Vous devez vous connecter pour publier un commentaire.
Si vous êtes intéressé par temps asymptotiquepuis comptage, de tri ou tri radix fournir de bonnes performances.
Toutefois, si vous êtes intéressé par temps horloge murale vous aurez besoin de comparer la performance entre les différents algorithmes à l'aide de vos ensembles de donnéesque les différents algorithmes fonctionnent différemment avec différents ensembles de données. Dans ce cas, il est toujours intéressant d'essayer de quicksort:
Source: http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Python
Puisque vous connaissez la plage de numéros, vous pouvez utiliser Comptage De Tri qui sera linéaire dans le temps.
Tri Radix théoriquement s'exécute en temps linéaire (temps de tri pousse à peu près en proportion directe de la taille de la matrice ), mais dans la pratique Quicksort est probablement plus adapté, sauf si vous êtes le tri absolument massive des tableaux.
Si vous voulez faire de quicksort un peu plus vite, vous pouvez utiliser le tri par insertion] lorsque la taille du tableau devient petit.
Il serait probablement utile de comprendre les notions de complexité algorithmique et Big-O notation trop.
Les premières versions de Python utilisé un hybride de
samplesort
(une variante de quicksort avec la grande taille de l'échantillon) et les binaires d'insertion de sorte que le haut-algorithme de tri. Cela s'est avéré être un peu instable. S0, à partir de python 2.3 onward utiliseadaptive mergesort
algorithme.Afin de mergesort (moyenne) =
O(nlogn)
.Afin de mergesort (pire) =
O(nlogn)
.Mais l'Ordre de tri rapide (pire) = n*2
si vous avez utilise
list=[ .............. ]
list.sort()
utilisemergesort algorithm.
Pour la comparaison entre l'algorithme de tri vous pouvez lire wiki
Pour le détail de la comparaison comp
Nous pouvons utiliser le comte de tri à l'aide d'un dictionnaire afin de réduire l'augmentation d'utilisation de l'espace, et de garder le temps d'exécution faible. Le comte de tri est beaucoup plus lente pour les petites tailles de tableau d'entrée en raison de l'python vs C mise en œuvre de surcharge. Le comte de tri commence à dépasser l'ordinaire de tri lorsque la taille du tableau (NOMBRE) est d'environ 1 million de dollars.
Si vous voulez vraiment énormes accélérations pour les plus petits de la taille des entrées, de mettre en œuvre le comte de tri en C et l'appeler à partir de Python.
(Correction d'un bug qui Aaron (+1) ont aidé à capturer ...)
Le python seulement la mise en œuvre ci-dessous compare les 2 approches...
Je suis peut-être un peu tard pour le spectacle, mais il y a un article intéressant qui compare les différentes sortes à https://www.linkedin.com/pulse/sorting-efficiently-python-lakshmi-prakash
L'une des principales conclusions est que, bien que le tri par défaut en grande, nous pouvons faire un peu mieux avec une version compilée de quicksort. Cela nécessite la Numba paquet.
Voici un lien vers le dépôt Github:
https://github.com/lprakash/Sorting-Algorithms/blob/master/sorts.ipynb
Les fonctions intégrées sont les meilleurs, mais puisque vous ne pouvez pas les utiliser avoir un coup d'oeil à ceci:
http://en.wikipedia.org/wiki/Quicksort
c'est un algorithme que j'ai créé, mais est vraiment très rapide. juste faire le tri(l)
l étant de la liste que vous souhaitez trier.
@fmark
Certains d'analyse comparative d'un python de fusion-tri de mise en œuvre que j'ai écrit contre python quicksorts de http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Python
et à partir du haut de réponse.
de fusion trier les remporte, cependant il utilise builtin int() pour le plancher