sort a comme argument une liste ou une expression ou une chaine
de caractères.
superoueg(L1,L2):={ local s,j; s:=min(size(L1),size(L2))-1; j:=0; tantque L1[j]==L2[j] and j<s faire j:=j+1; ftantque; //si L2[j]>L1[j] alors return 0 sinon return 1; fsi; si [sort(L1[j],L2[j])]==[L1[j],L2[j]] alors return 0 sinon return 1; fsi; }:;On a remplacé L2[j]>L1[j] par [sort(L1[j],L2[j])]==[L1[j],L2[j]] pour que superoueg soit aussi valable pour les chaines de caractères. On tape :
^
2+2*x*y+x
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 :
On obtient :
Pour trier des listes de listes
sort trie les listes de listes par ordre croissant.
On obtient :
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 :
On obtient :
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 :
On obtient :
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.