Previous Up Next

6.38.18  Trier : sort

sort a comme argument une liste ou une expression.

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]

sort ne trie pas des listes de listes, il faut donc lui passer une fonction de tri, par exemple par ordre décroissant de la 2ième colonne ou de la première en cas d’égalité. On tape :

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

On obtient :

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

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