Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Développement d'un petit algorithme de tri
    Bonjour tout le monde,

    J'ai cette suite de nombres qui constitue ma base de tri (1) :

    259 264 272 275 282 285 299 313 315 328 333 340 343 356 369 375 388 393 406 409 412 422 435 448 455 462 470 472 477 479 489 497 502 507 510 513 515 528 541 544 549 553 556 558 561 566 569 572 574 576 580 586 599 601 604 613 619 626 628 631 633 641 644 649 654 661 666 668 674 678 680 682 688 697 707 711 722 724 728 738 746 748 753 755 758 763 767 770 772 774 777 784 794 798 802 875 883 889 895 900 906 908 915 917 927 930 940 947 953 955 959 963 966 975 984 987 991 996 1001 1006 1012 1014 1018 1021 1028 1030 1034 1037 1042 1045 1049 1051 1059 1064 1069 1075 1081 1085 1087 1091 1095 1098 1102 1105 1108 1112 1114 1122 1128 1137 1143 1145 1151 1154 1158 1161 1165 1168 1171 1175 1177 1180 1183 1187 1189 1191 1193 1195 1198 1201 1203 1206 1209 1211 1215 1217 1219 1222 1225 1230 1234 1236 1239 1241 1243 1245 1247 1249 1252 1257 1262 1267 1272 1279 1284 1289 1294 1299 1305 1311 1317 1323 1326 1329 1332 1335 1341 1347 1353 1359 1362 1364 1369 1373 1376 1379 1383 1387 1391 1395 1399 1403 1407 1411 1414 1417 1419 1422 1424 1428 1432 1437 1441 1445 1449 1452 1456 1459 1461 1465 1469 1473 1477 1482 1487 1490 1492 1494 1497 1506 1510 1515 1519 1524 1529 1534 1539 1544 1547 1552 1557 1562 1567 1574 1577 1582 1584 1586 1591 1595 1600 1604 1608 1612 1616 1619 1623 1627 1637 1645 1653 1662 1668 1675 1679 1683 1686 1690 1694 1704 1708 1713 1721 1731 1736 1739 1746 1749 1753 1756 1760 1767 1771 1774 1777 1779 1783 1787 1790 1800 1804 1806 1808 1810 1812 1816 1821 1823 1825 1827 1829 1831 1835 1838 1840


    Je souhaite développer un petit algorithme qui me permettrait de "classer" une suite de nombres que je renseigne en fonction de la grille que je vous ai transmise ci-dessus.

    L'algorithme permettrait entre autres de renseigner la valeur inférieure à celle qui a été saisie et afficher le résultat en séparant chaque valeur par une virgule.

    Pour être plus parlant, voici quelques exemples :



    Exemple n°1 :

    Je saisis cette suite de nombres dans l'algorithme : 1793,1794,1795,1832,1796,1797,1798,1799

    L'algorithme va se baser sur la suite de nombres (1) et afficher pour chaque valeur son nombre précédent dans la base de tri. Le résultat supprime les doublons et sépare chaque valeur par une virgule : 1790,1821,1831

    Exemple n°2 :

    Je saisis cette suite de nombres dans l'algorithme : 1340,1339,1338,1337,1336,1352,1351,1350,1349,1348,1358,1357,1356,1355,1354,1346,1345,1344,1343,1342,1807,1809,1811

    L'algorithme va se baser sur la suite de nombre (1) et afficher pour chaque valeur son nombre précédent dans la base de tri. Le résultat supprime les doublons et sépare chaque valeur par une virgule : 1335,1341,1347,1353,1806,1808,1810



    J'ai déjà commencé à me renseigner sur les algorithmes de tri mais il semble que ce que je recherche n'existe pas...

    Cet algorithme me permettrait de gagner un temps considérable sachant que j'ai des milliers de lignes à trier. Je suis débutant en programmation et vous remercie d'avance pour votre aide !

  2. #2
    Expert éminent sénior
    Il s'agit de décomposer ton problème. Le principal truc que je vois, c'est que ta source de données n'est pas structurée. Ta cible non plus. C'est pour ça qu'il n'existe pas de fonction toute faite pour tout faire d'un coup. Il faut donc couper en morceaux.

    1. Ton algo doit commencer par une structuration, façon fonction split, pour avoir tes nombres à travailler dans un tableau ou une collection (suivant le langage).
    2. Ensuite la plupart des langages ont une fonction de tri integrée. A utiliser sans s'emmerder. Sous VBA, ça oblige à poser le tableau issu de split dans une feuille de calcul, puis à faire un sort.range. Ou alors se faire un tri à bulles soi-même. Pas très performant, mais pour quelques milliers d'entrées, devrait suffire.
    3. Ensuite, il faut dédoublonner. Soit utiliser une fonction natives du langage, là encore, soit se faire un algorithme (tout bête une fois les données triées, on a un tableau/une collection de sortie, on lit ce qu'on vient de trier élément par élément, et on ne garde que si c'est différent du précédent)
    4. Enfin, il faut reformater la chaîne avec des virgules. Lire chaque élément du tableau/collection, le concaténer dans la chaîne de sortie, rajouter une virgule, sauf si c'est le dernier.

    Tous les langages connus savent faire ça. même le BF (que je déconseille fortement, si tu va lire des exemples, tu comprendras pourquoi). Mon lien de tri mène vers rosetta code, ou tu trouveras des exemples pour la plupart des étapes que je viens de décrire, dans un pacson de langages. Amuses toi bien.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.