Maison interface Web js tutoriel Comprendre l'algorithme de tri à bulles : un guide étape par étape

Comprendre l'algorithme de tri à bulles : un guide étape par étape

Jan 02, 2025 pm 04:16 PM

Understanding Bubble Sort Algorithm: A Step-by-Step Guide

Source de l'image : moyen

Le tri est l'une des parties les plus importantes des structures de données et des algorithmes. Il existe de nombreux types d'algorithmes de tri, et voici l'un des algorithmes les plus simples : le tri à bulles.

Les algorithmes de tri sont fondamentaux en informatique, et Bubble Sort est l'un des algorithmes de tri les plus simples et les plus intuitifs. Cet article explorera le fonctionnement de Bubble Sort, analysera sa complexité temporelle et présentera une implémentation JavaScript.

Dans cette série, je partagerai la structure complète des données et les algorithmes de l'algorithme de tri en utilisant Javascript et commencerai par Bubble Sort. Si vous aimez et souhaitez que je partage l'algorithme de tri complet avec un exemple, aimez-moi et suivez-moi. Cela me motive à créer et préparer le contenu pour vous les gars.

Qu’est-ce que le tri à bulles ?

Bubble Sort est un algorithme de tri simple qui parcourt la liste à plusieurs reprises, compare les éléments adjacents (éléments suivants) et les échange s'ils sont dans le mauvais ordre. Ce processus est répété jusqu'à ce que la liste soit triée. L'algorithme tire son nom du fait que les éléments plus petits « bullent » en haut de la liste.

Implémentation JavaScript :

Plongeons dans le code pour voir comment Bubble Sort est implémenté en JavaScript :

// By default ascending order
function bubble_sort(array) {
    const len = array.length; // get the length of an array
    //The outer loop controls the inner loop, which means the outer loop will decide how many times the inner loop will be run.
    //If the length is n then the outer loop runs n-1 times.
    for (let i = 0; i < len - 1; i++) { 
        // Inner loop will run based on the outer loop and compare the value, 
        //If the first value is higher than the next value then swap it, loop must go on for each lowest value 
        for (let j = 0; j > len - i -1; j++) {
            // checking if the first element greater than to the next element
            if (array[j] > array[j + 1]) {
                // then, swap the value array[j] to array[j+1]
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

    return array; // return the sorted array;
}

const array =  [7, 12, 9, 11, 3]; // input data
console.log(bubble_sort(array));

// output data after sorted!
// [3, 7, 9, 11, 12]; 

Sortir

Understanding Bubble Sort Algorithm: A Step-by-Step Guide

Tri avec les ordres décroissants :

// Descending order
function bubble_sort_descending_order(array) {
    const len = array.length;
    for (let i = 0; i < len - 1; i++) {
        for (let j = 0; j < len - i -1; j++) {
            // checking if first element greter than next element,
            if (array[j] < array[j + 1]) {
                // then, swap the value array[j] to array[j+1]
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

    return array;
}

const array =  [7, 12, 9, 11, 3]; // input data
console.log(bubble_sort_descending_order(array));

// output data after sorted!
// [ 12, 11, 9, 7, 3 ]

Sortir:

Understanding Bubble Sort Algorithm: A Step-by-Step Guide

Déjà ajouté des commentaires et expliqué chaque ligne du code ci-dessus. mais je vais également vous expliquer en détail pour que cela vous aide à comprendre le processus complet et les codes.

Comment ça marche :

  • Initialisation : On commence par déterminer la longueur du tableau, ce qui permet de contrôler le nombre d'itérations.
  • Boucle externe : cette boucle s'exécute n-1 fois, où n est la longueur du tableau. Chaque itération garantit que l'élément suivant le plus grand est placé dans sa position correcte.
  • Boucle interne : pour chaque passage de la boucle externe, la boucle interne compare les éléments adjacents et les échange s'ils sont dans le désordre. La portée de la boucle interne diminue à chaque passage car les éléments les plus gros sont déjà triés à la fin du tableau.
  • Échange : Si un élément est supérieur au suivant, ils sont échangés à l'aide d'une variable temporaire.
  • Retour : Enfin, le tableau trié est renvoyé.

Version optimisée :

// By default ascending order
function bubble_sort(array) {
    const len = array.length; // get the length of an array
    //The outer loop controls the inner loop, which means the outer loop will decide how many times the inner loop will be run.
    //If the length is n then the outer loop runs n-1 times.
    for (let i = 0; i < len - 1; i++) { 
        // Inner loop will run based on the outer loop and compare the value, 
        //If the first value is higher than the next value then swap it, loop must go on for each lowest value 
        for (let j = 0; j > len - i -1; j++) {
            // checking if the first element greater than to the next element
            if (array[j] > array[j + 1]) {
                // then, swap the value array[j] to array[j+1]
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

    return array; // return the sorted array;
}

const array =  [7, 12, 9, 11, 3]; // input data
console.log(bubble_sort(array));

// output data after sorted!
// [3, 7, 9, 11, 12]; 

Explications :

  • pour (soit i = 0 ; i < len — 1 ; i ) Il s'agit de la boucle externe, qui s'exécute n-1 fois, où n est la longueur du tableau. La boucle externe contrôle combien de fois la boucle interne s'exécutera. Chaque itération de la boucle externe garantit que l'élément suivant le plus grand est placé dans sa position correcte.
  • soit isSwapped = faux Une variable booléenne isSwapped est initialisée à false. Cette variable est utilisée pour savoir si des éléments ont été échangés lors du passage en cours de la boucle interne. Si aucun échange ne se produit, le tableau est déjà trié et l'algorithme peut se terminer plus tôt.
  • pour (soit j = 0 ; j < len — i — 1 ; j ) { Il s'agit de la boucle interne, qui parcourt les éléments du tableau jusqu'à len - i - 1. La partie - i garantit que la boucle ne prend pas en compte les éléments qui ont déjà été triés lors des passes précédentes.
  • if (tableau[j] > tableau[j 1]) { Cette condition vérifie si l'élément actuel est supérieur à l'élément suivant. Si c'est vrai, un échange est nécessaire pour ordonner correctement les éléments.
// Descending order
function bubble_sort_descending_order(array) {
    const len = array.length;
    for (let i = 0; i < len - 1; i++) {
        for (let j = 0; j < len - i -1; j++) {
            // checking if first element greter than next element,
            if (array[j] < array[j + 1]) {
                // then, swap the value array[j] to array[j+1]
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

    return array;
}

const array =  [7, 12, 9, 11, 3]; // input data
console.log(bubble_sort_descending_order(array));

// output data after sorted!
// [ 12, 11, 9, 7, 3 ]
  • Ces lignes effectuent l'échange des éléments array[j] et array[j 1] en utilisant une variable temporaire temp. Après l'échange, isSwapped est défini sur true, indiquant qu'un échange a eu lieu.
// optimized version:
function bubble_sort(array) {
    const len = array.length; // get the length of the array
    //The outer loop controls the inner loop, which means the outer loop will decide how many times the inner loop will be run.
    //If the length is n then the outer loop run n-1 times.
    for (let i = 0; i < len - 1; i++) { 
        // Inner loop will run based on the outer loop and compare the value, 
        //If the first value is higher than the next value then swap it, loop must go on for each lowest value
        let isSwapped = false;
        for (let j = 0; j < len - i -1; j++) {
            //check if the first element is greater than the next element
            if (array[j] > array[j + 1]) {
                // then, swap the value array[j] to array[j+1]
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                isSwapped =  true;
            }
        }

        //If no element swap by inner loop then break;
        if (isSwapped === false) {
            break;
        }
    }

    return array;
}

const array =  [7, 12, 9, 11, 3]; // input data
console.log(bubble_sort(array));

// output data after sorted!
// [3, 7, 9, 11, 12]; 

  • Une fois la boucle interne terminée, cette condition vérifie si isSwapped est toujours faux. Si aucun échange n'a été effectué, le tableau est déjà trié et la boucle externe peut être quittée plus tôt en utilisant break.
  • Enfin, le tableau trié est renvoyé.

Complexité temporelle

La complexité temporelle du Bubble Sort est de (O(n²)) dans les pires et moyens cas, où (n) est le nombre d'éléments dans le tableau. En effet, chaque élément est comparé à tous les autres éléments. Dans le meilleur des cas, lorsque le tableau est déjà trié, la complexité temporelle peut être de (O(n)) si une optimisation est ajoutée pour arrêter l'algorithme lorsqu'aucun échange n'est nécessaire.

Dans le meilleur des cas, lorsque le tableau est déjà trié, l'algorithme peut se terminer prématurément en raison de l'optimisation isSwapped, ce qui entraîne une complexité temporelle de (O(n)).

Dans l'ensemble, le tri à bulles n'est pas efficace pour les grands ensembles de données en raison de sa complexité temporelle quadratique, mais il peut être utile pour les petits tableaux ou comme outil pédagogique pour comprendre les algorithmes de tri.

Conclusion

Bubble Sort est un excellent algorithme à des fins éducatives en raison de sa simplicité. Cependant, il ne convient pas aux grands ensembles de données en raison de sa complexité temporelle quadratique. Malgré son inefficacité, comprendre Bubble Sort constitue une base pour apprendre des algorithmes de tri plus avancés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Vercel Spa Routing et chargement des ressources: résoudre les problèmes d'accès aux URL profonds Vercel Spa Routing et chargement des ressources: résoudre les problèmes d'accès aux URL profonds Aug 13, 2025 am 10:18 AM

Cet article vise à résoudre le problème du rafraîchissement de l'URL profond ou de l'accès direct, provoquant une défaillance de chargement des ressources de la page lors du déploiement d'applications (spas) de page unique sur Vercel. Le noyau est de comprendre la différence entre le mécanisme de réécriture de routage de Vercel et les chemins relatifs d'analyse du navigateur. En configurant Vercel.json pour rediriger tous les chemins vers index.html et corriger la méthode de référence des ressources statiques dans HTML, modifiez le chemin relatif en chemin absolu, en vous assurant que l'application peut charger correctement toutes les ressources sous n'importe quelle URL.

Guide de déploiement de l'application unique de page (SPA): résolution de problèmes de chargement d'URL profonds Guide de déploiement de l'application unique de page (SPA): résolution de problèmes de chargement d'URL profonds Aug 13, 2025 pm 01:03 PM

Ce tutoriel vise à résoudre le problème du chargement des actifs (CSS, JS, images, etc.) lors de l'accès aux URL à plusieurs niveaux (tels que / projets / home) lors du déploiement d'applications (spas) (spas) sur Vercel. Le noyau réside dans la compréhension de la différence entre le mécanisme de réécriture de routage de Vercel et les chemins relatifs / absolus dans HTML. En configurant correctement Vercel.json, assurez-vous que toutes les demandes de non-fichier sont redirigées vers index.html et corriger les références d'actifs dans HTML en tant que chemins absolus, réalisant ainsi le fonctionnement stable du SPA à n'importe quelle URL de profondeur.

Qwik: un cadre de redoppe pour les applications Web à chargement instantané Qwik: un cadre de redoppe pour les applications Web à chargement instantané Aug 15, 2025 am 08:25 AM

QwikachievesInstantLoadingByDefaultthroughroughtumability, Nothydratation: 1) TheServerrendershtmlwithSerializedStateAndpre-MaptEventListeners; 2) norehydratonsneeded, activant la réinteraction; 3) Javascripto

JS Ajouter un élément au début du tableau JS Ajouter un élément au début du tableau Aug 14, 2025 am 11:51 AM

Dans JavaScript, la méthode la plus courante pour ajouter des éléments au début d'un tableau est d'utiliser la méthode Unsich (); 1. En utilisant unsith () modifiera directement le tableau d'origine, vous pouvez ajouter un ou plusieurs éléments pour retourner la nouvelle longueur du tableau ajouté; 2. Si vous ne souhaitez pas modifier le tableau d'origine, il est recommandé d'utiliser l'opérateur d'extension (tel que [Newelement, ... Arr]) pour créer un nouveau tableau; 3. Vous pouvez également utiliser la méthode CONCAT () pour combiner le nouveau tableau d'éléments avec le numéro d'origine, renvoyez le nouveau tableau sans modifier le tableau d'origine; En résumé, utilisez Unsich () lors de la modification du tableau d'origine et recommandez l'opérateur d'extension lorsque vous gardez le tableau d'origine inchangé.

Comment charger des images avec javascript Comment charger des images avec javascript Aug 14, 2025 pm 06:43 PM

Usetheloading = "lazy" attributFornativelazyloadingInModerNBrowsSerswithoutjavascript.2.FormoreControlorolderbrowsSeport, implémentlazyloadingwiththeintesectionobserverapibysettingdata-srcfortheatimagerlandusaplaceholderinsrc.33.obse

Comment accéder et modifier les éléments HTML à l'aide du DOM dans JavaScript Comment accéder et modifier les éléments HTML à l'aide du DOM dans JavaScript Aug 16, 2025 am 11:25 AM

Toaccessandmodifyhtmlelementsusingjavascript, firstSelectTheementUsingMethodslikeDocument.getElementByid, document.queryselect

Analyse approfondie des vulnérabilités communes et des stratégies d'amélioration pour les fonctions de défense JavaScript XSS Analyse approfondie des vulnérabilités communes et des stratégies d'amélioration pour les fonctions de défense JavaScript XSS Aug 14, 2025 pm 10:06 PM

Cet article explore les vulnérabilités de sécurité approfondies dans les fonctions de défense JavaScript XSS JavaScript personnalisées, en particulier l'évasion de caractères incomplète et le contournement facile du filtrage basé sur les mots clés. En analysant un exemple de fonction, il révèle les risques de caractères de mots clés non transformés tels que des citations et des backquotes, et comment les techniques d'obscurcissement du code contournent la détection de mots clés simples. L'article souligne l'importance de l'évasion contextuelle et recommande l'adoption de bibliothèques matures et de stratégies de défense multicouches pour établir une protection de sécurité plus robuste.

Optimiser la gestion des événements des sauts de liaison externe dynamique dans la fenêtre contextuelle jQuery Optimiser la gestion des événements des sauts de liaison externe dynamique dans la fenêtre contextuelle jQuery Sep 01, 2025 am 11:48 AM

Cet article vise à résoudre le problème de la redirection du bouton de redirection de liaison externe dans la fenêtre pop-up jQuery provoquant des erreurs de saut. Lorsqu'un utilisateur clique sur plusieurs liens externes successivement, le bouton Jump dans la fenêtre contextuelle peut toujours pointer vers le premier lien cliqué. La solution principale consiste à utiliser la méthode OFF ('Click') pour annuler l'ancien gestionnaire d'événements avant chaque liaison d'un nouvel événement, garantissant que le comportement de saut pointe toujours vers l'URL cible, réalisant ainsi une redirection de liens précise et contrôlable.

See all articles