Javascript

Tri de tableaux, à 1 ou 2 dimensions

En javascript, la méthode sort() permet de trier directement un tableau.
Avec cette méthode, on peut effectuer des tris efficaces de listes (tableau une dimension), mais aussi de tableaux deux dimensions (lignes et colonnes), trier suivant une dimension particulière, ou encore trier des données selon d'autres données, dans un autre tableau par exemple.

Méthode sort, tri par défaut

En javascript, la méthode sort permet de trier / ordonner les éléments d'un tableau. De nombreuses ressources expliquent son fonctionnement complet, par exemple sur w3school ou sur developer.mozilla.
Par exemple,
tab=[1,5,12,-3,2];
tab.sort();
alert(tab);
// affiche: -3,1,12,2,5
tab=["avion","voiture","Bateau","velo"];
tab.sort();
alert(tab)
// affiche: Bateau,avion,velo,voiture
Par défaut, les éléments du tableau sont convertis en chaîne de caractères et l'ordre est celui du code Unicode. Cette règle explique que "Bateau" se retrouve en premier, avant "avion" et les autres, et de même, plus surprenant à première vue (et dangereux si on n'est pas au courant et n'y prend gare) que "12" se retrouve avant "2" (car, on prenant caractère après caractère "1", du "12", est avant "2" et "5").

Tri avec fonction de comparaison

La méthode sort accepte en paramètre optionnel une fonction qui permet de définir la manière de faire le tri des éléments. Cette fonction est une relation d'ordre, c'est-à-dire entre autre une relation binaire qui permettant de comparer deux éléments. Cette fonction à deux arguments, a et b par exemple, doit retourner un nombre négatif si a doit être placé avant b, retourner un nombre positif si b doit êplacé avant b, tandis qu'avec un résultat nul les positions de a et b restent inchangées.
Avec les exemples précédents, pour ordonner des nombres de manière croissante ou des chaînes de caractères par ordre alphabétique, sans se préoccuper des majuscules/minuscules:
tab=[1,5,12,-3,2];
tab.sort(function (a,b) {return a-b;});
alert(tab);
// affiche: -3,1,2,5,12
tab=["avion","voiture","Bateau","velo"];
//
tab.sort(function (a,b) {
           if (a.toLowerCase()<b.toLowerCase()) {return -1;} 
           else if (a.toLowerCase()>b.toLowerCase()) {return 1;} 
           else {return 1;}});
alert(tab)
// affiche: avion,Bateau,velo,voiture

Liste des indices des valeurs triées

Il peut être intéressant parfois de connaître l'ordre du tri, c'est-à-dire la liste des indices dans lesquels étaient les éléments dans le tableau initial.
test = [4,3,5,1];
// => Ordre des éléments 3,1,0,2
len = test.length;
indices = new Array(len);
for (var i = 0; i < len; ++i) indices[i] = i;
indices.sort(function (a, b) {
          if (test[a] < test[b]) {return -1}
          else if (test[a] > test[b]) {return 1;}
          else {return 0;} });
//alert(indices);
Le tableau indices contient enfin l'ordre souhaité.

Trier un tableau à deux dimensions, suivant une ligne ou suivant une colonne

On peut appliquer la méthode précédente à un tableau à deux dimensions ; on spécifie justement alors dans la fonction que le tri s'effectue selon les éléments souhaité.
Par exemple tri, pour un tri suivant la deuxième colonne:
A=[[1,  5, 9],
   [2, 17, 8],
   [3,  3, 7],
   [6,  4, 1]];
A.sort(function(a,b) {
    if (a[1] < a[1]) {return -1}
    else if (a[1] > b[1]) {return 1;}
    else {return 0;} });
// A est maintenant
// A=[[3,  3, 7],
//    [6,  4, 1],
//    [1,  5, 9],
//    [2, 17, 8]];



Voir aussi:
LongPage: h2: 4 - h3: 0