Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 1300
Réponses : 4
Type : discussion
Etat : réponses autorisées

Ordonner une liste

monsaibert le 30/03/2012 à 15:35
programme de tri croissant

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?

Rq: on sait que TI le fait: TriCroi
linkakro le 30/03/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
monsaibert le 03/04/2012 à 19:07
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.
sandro le 03/04/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
linkakro le 19/04/2012 à 16:13
J'ai appris quelque chose en classe.
(c'est la deuxième fois en 2ans tongue.gif)
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.