Previous Up Next

6.41.20  Trier : sort

sort a comme argument une liste ou une expression ou une chaine de caractères.

Remarque
sort accepte un 2-ième argument après une liste qui est la fonction de tri, par exemple (x,y)->x>y pour avoir la liste triée selon l’ordre décroissant.
Attention La fonction de tri f doit définir un ordre strict faible c’est à dire que

Sinon l’algorithme employé risque de boucler.... Par exemple, on ne peut pas mettre comme fonction de tri : (x,y)->x[1]>=y[1]. On tape :

sort([3,4,2],(x,y)->x>y)

On obtient :

[4,3,2]

Pour trier des listes de listes
sort trie les listes de listes par ordre croissant.

sort([[1,3],[2,4],[2,3],[1,4]])

On obtient :

[[1,3],[1,4],[2,3],[2,4]]

Pour un ordre différent, il faut mettre une fonction de tri comme 2ième argument.
Par exemple :
Si on veut trier par ordre décroissant la première colonne ou en cas d’égalité par ordre décroissant la 2ième colonne (ordre lexicographique).
On tape :

sort([[1,3],[2,4],[2,3],[1,4]],(x,y)->when(x[0]==y[0],x[1]>y[1],x[0]>y[0]))

On obtient :

[[2,4],[2,3],[1,4],[1,3]]

Et si on veut trier par ordre décroissant la 2ième colonne ou en cas d’égalité par ordre décroissant la première colonne.
On tape :

sort([[1,3],[2,4],[2,3],[1,4]],
(x,y)->when(x[1]==y[1],x[0]>y[0],x[1]>y[1]))

On obtient :

[[2,4],[1,4],[2,3],[1,3]]

Attention Dans l’exemple précédent,

Soient :
L1:=[[1,2],[2,3],[4,3]]
L2:=[[1,2],[4,3],[2,3]]
Dans ce cas sort(L1,(x,y)->x[1]>y[1]) et sort(L2,(x,y)->x[1]>y[1]) renvoient des réponses différentes parce que l’ordre n’est pas total et que [2,3] et [4,3] sont considérés comme équivalents.


Previous Up Next