Je pratique pour trier manuellement 5 chiffres en les comparant les uns avec les autres, je dois la boucler avec N ^ 2 fois, mais je veux le réduire.
a1 = 100 a2 = 90 a3 = 45 a4 = 8 a5 = 0 i = 0 while i < 25: if a1 > a2: tmp = a1 a1 = a2 a2 = tmp elif a1 > a3: tmp = a1 a1 = a3 a3 = tmp elif a1 > a4: tmp = a1 a1 = a4 a4 = tmp elif a1 > a5: tmp = a1 a1 = a5 a5 = tmp elif a2 > a3: tmp = a2 a2 = a3 a3 = tmp elif a2 > a4: tmp = a2 a2 = a4 a4 = tmp elif a2 > a5: tmp = a2 a2 = a5 a5 = tmp elif a3 > a4: tmp = a3 a3 = a4 a4 = tmp elif a3 > a5: tmp = a3 a3 = a5 a5 = tmp elif a4 > a5: tmp = a4 a4 = a5 a5 = tmp i = i + 1 print(a1, a2, a3, a4, a5)
4 Réponses :
Vous utilisez un algorithme qui a une complexité de temps de Vous devez utiliser certains algorithmes plus rapides tels que En outre, vous pouvez utiliser le Alors, apprenez le Fusionner le tri Algorithm et utilisez-le pour obtenir O (n ^ 2) code>. p>
Fusionner le tri code> ou
Trier quick Trit code>. Mais pour les données précédemment triées
Quick Trit CODE> donnera une mauvaise performance, c'est pourquoi je suggère d'utiliser
Fusionner Trier code> ici. P>
Tri code> algorithme, mais parfois ce n'est pas une bonne solution. P>
o (Nlogn) code> Complexité du temps! P>
Comme d'autres l'ont suggéré, cet algorithme n'est pas très bon - mais vous pouvez rendre le code mieux (ce que, comme je le comprends, c'est ce que vous demandez).
au lieu d'utiliser un température variable pour le swap, Vous pouvez faire p> supprimer avec les trois lignes. p> aussi au lieu de p> Vous pouvez utiliser p> qui est plus élégant. p> p>
J'utilise rarement Python, alors je n'étais pas au courant de cela. J'ai supprimé ce commentaire et la supprimera ensuite pour éviter les commentaires inutiles.
Si vous recherchez un moyen efficace de trier ces 5 numéros dans les étapes les plus courtes possibles, vous trouverez peut-être cette réponse utile. Ici, les 5 numéros sont triés avec seulement 7 étapes (pire des cas). ATTENDU QUE, Même la procédure CODE> Fusionner la procédure prend au moins 8 étapes (oubliez le code complexe pour le tri de la fusion). P>
Tri de 5 entiers avec un max de 7 compare ( https://cs.stackexchange.com/a/10969 a>) p>
blockQuote> Fusion Sort code> est idéal pour les cas généraux, car la commande est
nlogn code> pour les meilleurs cas, moyens et pires. Mais je suggère le contraire, car le tri
fusionner code> ne serait pas meilleur que certains
O (n ^ 2) code> pour de simples éléments de 5 éléments. P>
Je me demandais simplement si ce code peut être plus optimal ... P>
Le code est un tri de bulle. Le code doit seulement boucle 4 fois, pas 25 fois. Le code déplace le plus gros élément de A5 sur la première boucle, puis la plus grande à A4 sur la deuxième boucle, puis A3 sur une troisième boucle et A2 sur la quatrième boucle, laissant le plus petit de A1. Déplier la boucle de tri pour la bulle, il faut 10 opérations de comparaison et d'échange: p>
xxx pré>
Ceci peut être réduit à 9 comparer et échanger des opérations en utilisant l'un de 180 possible Networks de tri pour 5 éléments. L'optimisation des processeurs pourrait faire certaines des comparies et des swaps en parallèle si les opérations sont indépendantes (n'impliquent pas les mêmes variables): p>
xxx pré>
similaire au lien La réponse de Sayooj Samuel, utilisant une combinaison de swaps et d'insertions, le nombre de componses peut être réduit de 9 à 7, mais il reste un maximum de 18 missions qui seraient des swaps ou se déplacent dans d'autres langages de programmation, les déclarations d'autre entraîneraient inconditionnelles. Saute sur la plupart des processeurs et il y a plus de dépendances de séquence, cela peut donc être plus lent que le tri du réseau. P>
if a1 > a2: a1,a2 = a2,a1 if a3 > a4: a3,a4 = a4,a3 if a1 > a3: a1,a2,a3,a4 = a3,a4,a1,a2 if a3 > a5: if a1 > a5: a1,a3,a4,a5 = a5,a1,a3,a4 else: a3,a4,a5 = a5,a3,a4 else: if a4 > a5: a4,a5 = a5,a4 if a2 > a4: if a2 > a5: a2,a3,a4,a5 = a3,a4,a5,a2 else: a2,a3,a4,a5 = a3,a4,a2,a5 else: if a2 > a3: a2,a3 = a3,a2
Regardez dans d'autres algorithmes de tri, comme tasorther, Quicksort ...
Je me demandais simplement si ce code peut être plus optimal ou pas?