Si on veut établir un code pour ordonner une liste dans un ordre croissant point par point on aboutit, xn et x(n+1) appartenant à L1,à devoir permutter les 2 nombres dans la liste L1. Comment faire?
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 30 Mar 2012, 17:36
Nous pouvons effectuer ce procédé facilement pour deux valeurs et avec quelques tests.
La difficulté pour les permutations de ce genre est qu'il faut stocker au moins une des valeurs en dehors de la variable de départ.
Code
If L1(1)>L1(2 // test de décroissance
Then
L1(1->A // stock intermédiare du maximum
L1(2->L1(1 // placer le minimum au début
A->L1(2 // placer le maximum à la fin
End
// si la liste était déjà croissante, on ne change rien.
Mais je compte te proposer ce que j'ai créé à l'occasion d'un défi dans [ce sujet] car celui-ci effectue un tri à la place de TriCroi (SortA en anglais).
Je l'ai épuré pour obtenir ceci :
Code
dim(L1->L
ClrList L2
For(W,1,L // chaque valeur de la liste sera recopiée
min(L1->L2(W // stock du minimum à sa place dans la nouvelle liste
For(V,1,L // recherche de la position du minimum
If L1(V)=min(L1
V->X
End
max(L1->L1(X // remplacement du minimum par le maximum, pour que la
// prochaine fonction min(L1) détecte un autre minimum
End
L2->L1 // stocker le résultat dans la liste de départ
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Bien sûr j'allais dans une mauvaise direction.Je pensais pouvoir comparer terme apres terme... "La difficulté pour les permutations de ce genre est qu'il faut stocker au moins une des valeurs en dehors de la variable de départ."
Il fallait penser 2 listes.
Il n'y a pas moyen de supprimer simplement un terme d'une liste ?
Le code serait plus simple si on pouvait supprimer le minimum à chaque fois.
Merci Linka pour le mise au point de ce code.Il n'a posé aucun probléme.
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 03 Avr 2012, 21:46
pour suprimer, tu met le terme en question a la fin, puis tu diminue de 1 la dimention de la liste. Mais bon, c'est lourd. Sinon, tu peut tout copier dans une seconde iste sauf ce terme, mais c'est pas mieux.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 19 Avr 2012, 16:13
J'ai appris quelque chose en classe.
(c'est la deuxième fois en 2ans )
Le prof a montré l'algorithme de "tri à bulle" qui est supposé être plus rapide que les autres algorithmes si tout est codé dans le même language.
(ce qui n'est pas le cas de mon programme précédent qui utilise la fonction min() codée en assembleur)
J'en ai traduit la méthode en TI-Basic :
Code
dim(L1->N
For(A,1,N-1
For(B,1,N-A
L1(B+1
If Ans<L1(B
Then
Ans->C
L1(B->L1(B+1
C->L1(B
End
End
End
Il parcourt la liste de haut en bas tout en permutant des termes consécutifs s'ils ne sont pas dans l'ordre croissant.
Ainsi le dernier terme à l'issue du premier parcours est le maximum.
Puis on recommence le même procédé pour les autres termes, mais pas jusqu'à la fin puisque la fin est déjà triée.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)