Algorithmes de tri courants implémentés en JavaScript

Les algorithmes de tri sont généralement catégorisés en tri par échange, par insertion, par sélection et par fusion. Voici des implémentations JavaScript de quelques méthodes courantes.

Tri à bulles

Cet algorithme compare des éléments adjacents et les échange si nécessaire, en répétant le processus jusqu'à ce que le tableau soit ordonné.


function triBulle(liste) {
    const longueur = liste.length;
    for (let passe = 0; passe < longueur - 1; passe++) {
        for (let idx = 0; idx < longueur - passe - 1; idx++) {
            if (liste[idx] > liste[idx + 1]) {
                [liste[idx], liste[idx + 1]] = [liste[idx + 1], liste[idx]];
            }
        }
    }
    return liste;
}
console.log(triBulle([3, 6, 4, 1, 5, 8]));

Complexité temporelle : O(n²)

Tri rapide

Le tri rapide sélectionne un pivot, partitionne les éléments en sous-groupes inférieurs et supérieurs, puis applique récursivement la même méthode.


function triRapide(arr) {
    if (arr.length <= 1) return arr;
    const pivot = arr[Math.floor(arr.length / 2)];
    const inférieurs = [], égaux = [], supérieurs = [];
    for (const val of arr) {
        if (val < pivot) inférieurs.push(val);
        else if (val > pivot) supérieurs.push(val);
        else égaux.push(val);
    }
    return [...triRapide(inférieurs), ...égaux, ...triRapide(supérieurs)];
}
console.log(triRapide([3, 6, 4, 1, 5, 8]));

Complexité temporelle : O(n log n) en moyenne, O(n²) dans le pire cas.

Tri par insertion

Cette méthode insère chaque élément dans une séquence déjà triée, en comparant avec les éléments précédents pour trouver sa place corercte.


function triInsertion(données) {
    const n = donnée.length;
    for (let i = 1; i < n; i++) {
        const actuel = donnée[i];
        let j = i - 1;
        while (j >= 0 && donnée[j] > actuel) {
            donnée[j + 1] = donnée[j];
            j--;
        }
        donnée[j + 1] = actuel;
    }
    return donnée;
}
console.log(triInsertion([3, 6, 9, 2, 8, 4]));

Complexité temporelle : O(n²)

Tri de Shell

Une variante du tri par insertion qui utilise des intervalles décroissants pour comparer des éléments éloignés, améliorant ainsi l'efficacité.


function triShell(tab) {
    let n = tab.length;
    let écart = Math.floor(n / 2);
    while (écart > 0) {
        for (let i = écart; i < n; i++) {
            const temp = tab[i];
            let j = i;
            while (j >= écart && tab[j - écart] > temp) {
                tab[j] = tab[j - écart];
                j -= écart;
            }
            tab[j] = temp;
        }
        écart = Math.floor(écart / 2);
    }
    return tab;
}
console.log(triShell([3, 6, 9, 2, 8, 4]));

Complexité temporelle : dépend de la séquence d'écarts, typiquement O(n log² n).

Le tri par sélection, qui extrait itérativement le minimum, et le tri par tas, utilisant une structure de tas, sont d'autrse approches courantes.

Étiquettes: JavaScript Bubble Sort Quick Sort Insertion Sort Shell Sort

Publié le 29 mai à 08h54